Talend - одна строка ко многим, переменное количество выходных строк - PullRequest
0 голосов
/ 27 октября 2011

Справочная информация: В Talend принято использовать что-то вроде tSplitRow для отображения одной строки с несколькими полями в несколько строк. Строка с полями:

Date | Name | MorningPhone | Day Phone | EveningPhone ... можно разделить на:

Date | Name | Phone ... и у вас всегда будет 3 результирующих строки из одной строки.

<ч />

Вопрос: Что если я хочу количество строк в переменном количестве полей?

У меня есть схема: UniqueID | FieldSet, где FieldSet - это поле столбцов с разделителями, которые делятся на девять. Если в этом столбце есть 45 полей, я хочу 5 строк. 81 поле => 9 строк.

Я пытаюсь использовать tJavaRow для разбора полей, но я не знаю, как объединить это с tSplitRow для генерации соответствующего количества полей.

Идеи? Спасибо!

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Я использовал пользовательский tJavaRow - это превратило специально отформатированную строку в новую таблицу. Вроде взломать, но это сработало.

String input = "";
String OUT = "";


try {
      input = java.net.URLDecoder.decode(input_row.CustomField16, "ASCII");

} catch (UnsupportedEncodingException e) {
      e.printStackTrace();
}

String[] pieces = input.split(";");

/*for(int a=0; a<pieces.length; a++)
      System.out.println("Piece "+a+"\n"+pieces[a]);*/



String[] allfields = pieces[0].split("\\|");

//System.out.println("num_full_rows="+num_full_rows);


int fieldnum=9;
int totalrows=1;
for (int i=0; i+8<allfields.length; i++) {

      String xrow = allfields[i];
      i++;
      for (int j=i; j<fieldnum*totalrows;j++){
            xrow=xrow+"\t"+allfields[j];
      }
      i+=fieldnum-2;

      totalrows++;
      OUT += (input_row.LoadTime + "\t"
                  + input_row.minutepart + "\t" + input_row.TXID
                  + "\t" + input_row.SessionString + "\t" + xrow + "\n");


}

output_row.BULK = OUT;
1 голос
/ 27 марта 2014

Talend эволюционировал с тех пор, как был задан этот вопрос, и гораздо лучший способ сделать это - использовать компонент tNormalize.

enter image description here

Сначала мы используем такой файлв качестве ввода:

pepe|123|123
juan|454|2423|34343|5454

Мы читаем этот файл, используя компонент tFileInputRegex.Мы должны определить регулярное выражение и схему.Регулярное выражение будет:

"^([^|]+)\\|(.+)"

Схема будет:

enter image description here

Затем мы соединяем tFileInputRegex с tNormalize.Мы устанавливаем разделитель на:

"\\|"

И, наконец, мы используем вывод по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...