Talend - объединить две строки файла с разделителями, чтобы получить один регистр

Я анализирую файлы файлов с разделителями, чтобы получить информацию, которую я помещу в таблицу базы данных.

Теперь у меня есть файл, в котором я должен объединить каждые две строки, чтобы получить информацию об одном отдельном регистре (одна строка таблицы базы данных) - в строке 1 есть некоторые поля из строки базы данных, а в строке 2 есть некоторые другие поля для поставить в один ряд.

Как я могу обрабатывать две строки одновременно?

Например, если предположить, что у меня есть файл с 6 строками, он соответствует 3 записям в моей таблице базы данных, которая имеет 9 столбцов. Из «нечетных строк» ​​я получаю столбцы 1, 3, 4, 5, 8 и 9. Из «четных строк» ​​я получаю оставшуюся информацию (столбцы 2, 6 и 7):

IN  | COLUMN1 | xxxxxxx  | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8

OUT | xxxxxxx | COLUMN2 | xxxxxxx  | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx

IN  | COLUMN1 | xxxxxxx  | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8

OUT | xxxxxxx | COLUMN2 | xxxxxxx  | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx

IN  | COLUMN1 | xxxxxxx  | COLUMN3 | COLUMN4 | COLUMN5 | xxxxxxx | xxxxxxx | COLUMN8

OUT | xxxxxxx | COLUMN2 | xxxxxxx  | xxxxxxx | xxxxxxx | COLUMN6 | COLUMN7 | xxxxxxx

person user2144555    schedule 23.01.2014    source источник


Ответы (1)


Вы можете попробовать разделить файл на два типа строк, а затем использовать tMap для их объединения.

Чтобы уточнить, вам нужно разделить файл в зависимости от того, является ли он IN или OUT, а затем использовать tMap для объединения столбцов в соответствии с вашими потребностями.

Я немного изменил данные вашего примера, чтобы они выглядели примерно так:

|=---+-----------+-----------+-----------+-----------+-----------+-----------+-----------+----------=|
|IN1 |ROW1COLUMN1|xxxxxxx    |ROW1COLUMN3|ROW1COLUMN4|ROW1COLUMN5|xxxxxxx    |xxxxxxx    |ROW1COLUMN8|
|OUT1|xxxxxxx    |ROW1COLUMN2|xxxxxxx    |xxxxxxx    |xxxxxxx    |ROW1COLUMN6|ROW1COLUMN7|xxxxxxx    |
|IN2 |ROW2COLUMN1|xxxxxxx    |ROW2COLUMN3|ROW2COLUMN4|ROW2COLUMN5|xxxxxxx    |xxxxxxx    |ROW2COLUMN8|
|OUT2|xxxxxxx    |ROW2COLUMN2|xxxxxxx    |xxxxxxx    |xxxxxxx    |ROW2COLUMN6|ROW2COLUMN7|xxxxxxx    |
|IN3 |ROW3COLUMN1|xxxxxxx    |ROW3COLUMN3|ROW3COLUMN4|ROW3COLUMN5|xxxxxxx    |xxxxxxx    |ROW3COLUMN8|
|OUT3|xxxxxxx    |ROW3COLUMN2|xxxxxxx    |xxxxxxx    |xxxxxxx    |ROW3COLUMN6|ROW3COLUMN7|xxxxxxx    |
'----+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------'

Единственное реальное дополнение состоит в том, что теперь рядом с IN или OUT первого столбца есть ключ к тому, как его следует соединить.

Сначала вы захотите разделить данные на входную и выходную части с помощью настройки tMap, например:

Разделить файл с помощью tMap

Это просто отправляет данные по одному из двух путей в зависимости от того, начинается ли поле идентификатора с «IN» или «Out».

После этого вы захотите рекомбинировать его с другой настройкой tMap, например:

Рекомбинируйте файлы с помощью tMap

Это объединяется на основе извлеченного ключа из файла идентификаторов и использует соответствующие столбцы в объединенном выводе.

К сожалению, вы не можете разделить поток с помощью tMap, а затем снова присоединиться к нему, просто вернув его обратно в другой tMap, поэтому лучше всего вывести его в два разных места (либо в таблицы базы данных, либо во временные файлы CSV), а затем, когда это подзадача будет завершена. затем читать в этих отдельных местах и ​​рекомбинировать со вторым tMap.

Пример работы может выглядеть так:

пример настройки задания

Если у вас нет естественного ключа для присоединения, вы можете сгенерировать его, взяв выходные данные первого tMap, а затем добавив столбец с выражением Numeric.sequence в качестве значения столбца.

person ydaetskcoR    schedule 23.01.2014
comment
Но нужно ли мне сохранять 2 типа файлов? - person user2144555; 24.01.2014
comment
Я отредактировал свой ответ, чтобы показать, как это можно сделать. Это потребует настройки в зависимости от ваших фактических данных, но должно дать вам хорошее представление о том, что нужно сделать. - person ydaetskcoR; 27.01.2014
comment
Большое спасибо за объяснение. Это работает! - person user2144555; 27.01.2014