Перенос таблицы с PutDatabaseRecord с другим именем столбца в целевой таблице - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно перенести данные из таблицы db2 в таблицу mssql, но один столбец имеет другое имя, но тот же тип данных.

Таблица Db2: NROCTA, NUMRUT, DIASMORA2

Таблица MSSQL: NROCTA, NUMRUT, DIAMORAS

Как вы видите, DIAMORAS отличается.

Я использую следующий поток:

ExecuteSQL -> SplitAvro -> PutDatabaseRecord

В PutDataBaseRecord в качестве RecordReader я настроил AvroReader следующим образом:

Стратегия доступа к схеме: используйте встроенную схему Avro. Текст схемы: $ {avro.schema}

Поток просто вставляет два первых столбца. Как я могу сделать отображение между столбцами DIASMORA2 и DIAMORAS?

Заранее спасибо!

1 Ответ

0 голосов
/ 04 июня 2019

Во-первых, вам, вероятно, вообще не нужен SplitAvro в вашем потоке, если только нет некоторого логического поднабора строк, которые вы пытаетесь отправить как отдельные транзакции.

Для изменения имени столбца используйте UpdateRecordи установите для поля /DIASMORAS путь записи /DIASMORA2 и измените имя поля в схеме AvroRecordSetWriter с DIASMORA2 на DIASMORAS.

Эта последняя часть немного сложнее, поскольку вы используете встроенную схему в AvroReader.Если схема всегда будет одинаковой, вы можете остановить процессор UpdateRecord и вставить процессор ExtractAvroMetadata для извлечения атрибута avro.schema.Это поместит встроенную схему в атрибут avro.schema потокового файла.

Затем перед запуском UpdateRecord запустите процессоры ExecuteSQL и ExtractAvroMetadata, а затем проверьте файл потока в очереди, чтобы скопировать схему из avro.schema атрибут.Затем в AvroRecordSetWriter в ConvertRecord вместо наследования схемы вы можете выбрать Use Schema Text, а затем вставить схему из атрибута, изменив DIASMORA2 на DIASMORAS.Этот подход помещает значения из поля DIASMORA2 в поле DIASMORAS, но поскольку DIASMORA2 отсутствует в выходной схеме, он игнорируется, тем самым эффективно переименовывая поле (хотя под капотом это копирование иудалить).

...