Создание счетчика приращений при каждом запуске задания в Talend с помощью tMap - PullRequest
0 голосов
/ 22 апреля 2019

Я хотел бы спросить, как создать определенный счетчик в каждой строке, если я запускаю задание в Talend Data Integration при использовании компонентов tMap

Например, это результат, в котором по 5 данных в каждомв строке 0 счетчик

Таблица животных
Счетчик животных
Зебра 0
Зебра 0
Зебра 0
Зебра 0
Зебра 0

Когда я запускаю задание, используя tMap, я хочу получить конечный результат, подобный этому

Таблица животных: окончательные результаты
Счетчик животных
Зебра 0
Зебра 0
Зебра 0
Зебра 0
Зебра 0
Зебра 1
Зебра 1
Зебра 1
Зебра 1
Зебра 1

Каждый раз, когда я запускаю работу, полена счетчике всегда увеличивается на единицу, а данные всегда вставляются

С уважением

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

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

Вместо использования tMap я использую компонент tJavaRow, результат будет таким же, как вы просили, нодостигается с помощью кода Java.

Чтение задания из .csv через tFileInputDelimited, который получил следующие данные .

После вы увидите компонент tJavaRow, который находится внутриэто код Java и, наконец, компонент tlogRow для отображения окончательного набора данных.- Job Image -

Код внутри tJavaRow

output_row.Animal = input_row.Animal; /*Code generated according to input schema and output schema*/
if (context.counter == -1){ /*Conditional to hold just the first row interaction*/

    context.counter=0; /*Initialization of the context variable (Counter)*/
    output_row.Counter = context.counter;
    context.previousRecord = row1.Animal; /*Store the previous animal name*/

}else{ /*the java thread execution takes this way after the first interaction*/

      if(row1.Animal.equals(context.previousRecord)){ /*compare the actual animal (row1.Animal) vs the previous one*/

          output_row.Counter = context.counter;
          context.previousRecord = row1.Animal;
      }else{

          context.counter++;
          output_row.Counter = context.counter;
          context.previousRecord = row1.Animal;
      }
}

Здесь у вас есть изображение окончательного результата !

\ (ToT) /

0 голосов
/ 23 апреля 2019

Я вижу два варианта:

  1. использовать переменную контекста, хранящуюся в файле.Вам нужно будет загрузить этот файл перед каждым заданием и обновить его перед завершением.в Tmap это будет выглядеть примерно так: Integer.parseInt (context.Counter) + 1

  2. Предполагая, что вы загружаете свои записи в базу данных, выполните поиск значения максимального счетчикаи назначьте это переменной в TMap

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