2013-06-28 4 views
1

В Pentaho ETL Kettle я хотел бы получить предыдущую строку за один шаг. Давайте объявим поток данных как myMat:Доступ к предыдущей строке в чайнике

myMat:

 col0 col1 
row0: 15 a 
row1: 10 b 
row2: 24 hi 
row3: 11 bye 

Я хотел бы использовать этот расчет:

newNumber= myMat[i][0] + myMat[i-1][0] 

Вы знаете какой-либо способ сделать это в Kettle?

ответ

1

Вы также можете сделать это с шагом Analytic Query. Однако вам понадобится поле группировки в вашем наборе данных. Если вы хотите обработать весь набор как одну группу, поставьте шаг Add Constants перед шагом аналитического запроса, который вставляет, например, только 1 и группу.

В любом случае, если вы хотите использовать его в расчете, вам придется иметь дело с NULL. LAG 1 первого ряда вашей группы всегда будет NULL. Если вы просто хотите сопоставить это с 0, вы делаете это с шагом If field values is null. Вот что это может выглядеть следующим образом:

Sum of previous row

Однако G Гордон правильно. Вы должны подумать, действительно ли это имеет смысл на основе проблемы, которую вы пытаетесь решить.

+0

Спасибо. Как вы получаете доступ к предыдущему значению в калькуляторе? – vitorek

+0

Аналитический запрос помещает значение предыдущей строки (лаг 1) в новый столбец в текущей строке. –

+0

Brian.D.Myers, я использовал ваш совет. Он возвращал значения, как ожидалось. Однако я не использовал шаг добавления констант и группировку на этапе аналитического запроса. В аналитическом запросе я просто определил аналитические функции как: LAG «N» rows BACKWARD и N = 1, N = 2, N = 3, и он работал нормально. Спасибо – vitorek

0

Вы можете делать такие вещи на пользовательском шаге Java или JavaScript, сохраняя состояние между каждой обрабатываемой вами строкой. Однако ...

Порядок потока не гарантируется. Кроме того, вы можете обрабатывать несколько строк параллельно одновременно. Итак, как вы можете себе представить, такой расчет может быть проблематичным. Что вы пытаетесь достичь? Существует почти наверняка лучший способ.

+0

Мне просто сказали проанализировать возможности запроса previoust и пересылки значений в потоке. Я вижу, что проблематично получить, например, второе-предыдущее значение. В моем примере почти 10000 строк порядок значений в потоке такой же, как и на входе. Как вы думаете, порядок потока может меняться в случае большего количества данных? – vitorek

+0

Я не знаю размер потока, изменяющего вероятность того, что поток будет обработан в каком-то другом порядке, чем «естественный». –

Смежные вопросы