Прежде всего, обратите внимание, что вы не сможете увидеть значение переменной в том же преобразовании, где вы его установили / изменили. Обычно значения переменных для преобразования считываются при его инициализации. Таким образом, вы можете изменить значение переменной для работы родителя / бабушки и дедушки, но не для того же преобразования.
Вариант 1 (структура метаданных шага потока):
Один из вариантов - использовать структуру метаданных шага потока http://wiki.pentaho.com/display/EAI/Metadata+Structure+of+Stream На этом шаге появятся следующие поля:
- Позиция: позиция поля во входящем потоке данных.
- Имя поля: имя поля во входящем потоке данных.
- Комментарии: без комментариев
- Тип: строка, целое число, число и т. Д.
- Длина: длина поля.
- Точность: применимо для целых чисел, чисел и -1, если не применимо (например, для строк)
- Происхождение: шаг, на котором были получены метаданные.
Результат этого шага может впоследствии использоваться для установки значений переменных.
Вариант 2 (Javascript):
Шаг Java Script имеет getInputRowMeta () функция, которая возвращает RowMetaInterface.
Далее вы можете вызвать getValueMetaList (), который вернет вам список ValueMetaInterface. Затем вы можете просто перебрать все элементы в списке и вызвать getName()
для каждого объекта, чтобы получить имя каждого поля ввода.
Пример (большая часть кода здесь на самом деле просто для иллюстрации вывода):
// get instance of RowMetaInterface, which represents metadata of your input row:
var rowMetaInterface = getInputRowMeta();
// get List of ValueMetaInterface objects, which represent each of your input fields:
var valueMetaList = rowMetaInterface.getValueMetaList();
// get this object to be able to iterate over the list:
var iterator = valueMetaList.iterator();
// I am going to save all results into this JS object, then convert it to JSON string and pass into a variable
var allFields = [];
while (iterator.hasNext()) {
// get current ValueMetaInterface object:
var valueMetaInterface = iterator.next();
// The name of current field:
var fieldName = valueMetaInterface.getName();
// getType() returns just an internal integer number of the type:
var typeIndex = valueMetaInterface.getType();
// typeName will hold the actual String name of the type:
var typeName = org.pentaho.di.core.row.ValueMetaInterface.typeCodes[typeIndex];
// You proabably don't need the following part. It is here just for illustration purpose:
// Prepare data to be converted to JSON:
var field = {};
// wrap Java String into a JavaScript String object to be able to convert them into Json
field.fieldName = String(fieldName);
field.fieldType = String(typeName);
allFields.push(field)
}
var allFieldsJson = JSON.stringify(allFields);
/* scope of the variable:
"s": System scope
"r": root
"p": parent
"g": grandparent*/
var variableScope = "r";
setVariable("inputFields", allFieldsJson, variableScope);
writeToLog("b", "JSON string:");
writeToLog("b", allFieldsJson);
// In other job/transformation you'll be able to parse json object into a javascript object back:
var fields = JSON.parse(allFieldsJson);
for (var i = 0; i < fields.length; i++) {
fieldName = fields[i].fieldName;
fieldType = fields[i].fieldType;
writeToLog("b", "Field number " + i + ":");
writeToLog("b", fieldName);
writeToLog("b", fieldType);
}
В журнале вы увидите следующий вывод:
2016/10/13 15:33:09 - Modified Java Script Value.0 - Optimization level set to 9.
2016/10/13 15:33:09 - Modified Java Script Value.0 - JSON string:
2016/10/13 15:33:09 - Modified Java Script Value.0 - [{"fieldName":"test","fieldType":"String"},{"fieldName":"test 2","fieldType":"Integer"},{"fieldName":"another field","fieldType":"BigNumber"}]
2016/10/13 15:33:09 - Modified Java Script Value.0 - Field number 0:
2016/10/13 15:33:09 - Modified Java Script Value.0 - test
2016/10/13 15:33:09 - Modified Java Script Value.0 - String
2016/10/13 15:33:09 - Modified Java Script Value.0 - Field number 1:
2016/10/13 15:33:09 - Modified Java Script Value.0 - test 2
2016/10/13 15:33:09 - Modified Java Script Value.0 - Integer
2016/10/13 15:33:09 - Modified Java Script Value.0 - Field number 2:
2016/10/13 15:33:09 - Modified Java Script Value.0 - another field
2016/10/13 15:33:09 - Modified Java Script Value.0 - BigNumber
2016/10/13 15:33:09 - Modified Java Script Value.0 - Finished processing (I=0, O=0, R=1, W=1, U=0, E=0)
person
Andrei Luksha
schedule
13.10.2016