Я обрабатываю файл /etc/group
из системы.Я загружаю его с шагом CSV input
с разделителем :
.Имеет четыре поля: group
, pwfield
, gid
, members
.Поле members
представляет собой разделенный запятыми список с именами учетных записей с неопределенным числом от 0 до бесконечного.
Я хотел бы создать список записей с тремя полями: group
, gid
, account
.На первом шаге я использую User Defined Java Class
, на втором - Select values
.
Пример ввода:
root:x:0:
first:x:100:joe,jane,zorro
second:x:101:steve
Пример вывода (XLS) - ожидается:
group gid account
first 100 joe
first 100 jane
first 100 zorro
second 101 steve
Пример вывода (XLS) - фактический, неправильный:
group gid account
first 100 zorro
first 100 zorro
first 100 zorro
second 101 steve
Пользовательский класс Java:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
// boilerplate
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
String tmp = get(Fields.In, "members").getString(r);
if(null==tmp)
return true;
String accounts[] = tmp.split(",");
for(int i=0; i<accounts.length; ++i){
Object[] out_row = createOutputRow(r, data.outputRowMeta.size());
String account = accounts[i];
get(Fields.Out, "account").setValue(out_row,account);
putRow(data.outputRowMeta, out_row);
}
return true;
}
Я считаю, что пропустил вызов какой-либо административной функции, или яследует использовать что-то отличное от createOutRow()
.Google не помог.

Загадочно, если я создаю преобразование, как показано на рисунке, тогда
XLS debug A
имеет правильные значения account
в каждомстрока XLS debug B
имеет повторяющиеся значения account
, как в примере с примером.
Если поместить шаг Dummy
перед Select values 7
, XLS debug B
станет правильным иXLS debug A
становится плохо.