Pentaho PDI: окончательное значение вычисляемого поля предыдущей строки

Я попытался использовать шаг Analytik Query для доступа к некоторому вычисляемому полю предыдущей строки. Оказывается, все строки вычисляются параллельно, и что доступ к полям предыдущей строки дает вам текущее значение, которое они имеют во время их обработки, что является своего рода случайным. Не представляется возможным получить final значение поля предыдущей строки. Или есть другой способ, кроме шага Analytik Query? Думаю, все, что мне нужно, это флажок «Дождаться завершения предыдущих строк» ​​...

Для чего мне это нужно: я обрабатываю данные, зависящие от времени, и выполняю распознавание состояния. Когда я в настоящее время нахожусь в состоянии A, я делаю другие вещи со своими данными, а затем когда я нахожусь в состоянии B. Поэтому мне нужно знать состояние предыдущей строки данных (которая определяется не до конца моего преобразования).

Это можно сделать в Excel очень просто, поэтому я думаю, что в PDI должен быть какой-то способ. :-)

Спасибо за любую помощь!


person Ewe    schedule 31.08.2015    source источник


Ответы (3)


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

Надеюсь это поможет:)

person Rishu Shrivastava    schedule 01.09.2015
comment
Привет, Ришу, спасибо за комментарий. Я только что взглянул на пример, поставляемый с PDI, и не уверен, что он может быть полезен. Я не думаю, что смогу просто разделить рабочий процесс на две части и дождаться завершения первой части. Другими словами, я не могу дождаться шага, мне нужно дождаться предыдущей строки. Как только строка 1 будет завершена, я могу перейти к строке 2 и так далее. - person Ewe; 01.09.2015

Я считаю, что ее можно решить с помощью шага Пользовательский класс Java (UDJC). Если вы отсортируете строки перед их обработкой, на этапе Сортировать по будет ожидаться последняя строка, установленная по умолчанию.

Вот самый простой пример записи выходной строки для каждой входной строки. При использовании шага User Defined Java Class важно помнить о том, что они переписывают весь ваш набор данных, поэтому о нем нужно хорошо подумать, особенно если вы просматриваете предыдущие ряды. Надеюсь, это немного поможет.

// A class member that stores the previous row:
public Object[] previousRow;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) 
    throws KettleException  {   

    // Fetching row:
    Object[] r = getRow();
    // Check if r is null:
    if (r == null) {
      setOutputDone();
      return false;
    }
    // Get some field's value:
    String someFieldValue = get(Fields.In, "someFieldName").getString(r);

    // Log value if you want:
    logBasic("current field value is " + someFieldValue);

    // Generate an output row object:
    Object[] outputRow = RowDataUtil.createResizedCopy(r, data.outputRowMeta.size());

    // Modify row's field values if needed:
    get(Fields.Out, "someFieldName").setValue(outputRow, "a modified value here");

    // Write row:
    putRow(data.outputRowMeta, outputRow);
    // Assign current row to previous row:
    previousRow = r;
    return true;
}

РЕДАКТИРОВАТЬ: Еще одна важная вещь, которую следует отметить в отношении PDI - метод блокировки, либо путем блокирования шагов, либо с помощью шага Сортировать по, выполняется путем проверки наборов строк < / strong>, а не отдельные строки. Как это можно проверить?

Щелкните правой кнопкой мыши -> Параметры преобразования -> Разное -> Количество строк в наборе строк.

Значение по умолчанию - 10000 строк. Разработчики PDI часто создают тупик, используя один из шагов блокировки с размером набора строк, который не соответствует их объему данных - имейте это в виду.

person Yuval Herziger    schedule 02.09.2015

Используйте преобразования «Определить последнюю строку в потоке» и «Отфильтровать строки». Первое преобразование проверяет, является ли это последней строкой, и возвращает логическое значение, а последнее можно использовать для фильтрации записей на основе возвращенного логического значения.

person DUnkn0wn1    schedule 04.09.2015