Проблема с setVariable и getVariable для интеграции данных Pentaho

У меня есть работа со следующей трансформацией в строке:

1) Пуск

2) calculate_variables

3) use_variables

введите описание изображения здесь

Преобразование Calcul_variables

Это преобразование состоит из 3 шагов:

шаг 1: шаг "Table input", который считывает одно значение my_date из базы данных.

шаг 2: шаг "Add constant values", объявляющий константу даты some_date

шаг 3: шаг «Script Values / Mod», представляющий собой шаг javascript / java, в котором используются my_date и some_date для выполнения некоторых вычислений и получения двух переменных результата. Один - это число в виде строки, а другой - дата в виде строки. В конце шага javascript у меня есть следующие утверждения:

setVariable("NUMBER_VARIABLE", calculatedNumber, "r");
setVariable("DATE_VARIABLE", calculatedDate, "r");

Мое понимание в Пентахо ограничено. Но насколько мне известно, это создает две новые переменные NUMBER_VARIABLE и DATE_VARIABLE и делает их доступными для любых других заданий и преобразований, поскольку они установлены на root.

преобразование use_variables

Здесь я хочу использовать переменные NUMBER_VARIABLE и DATE_VARIABLE.

Шаг 1: у меня "Generate Rows" в качестве первого шага в этом преобразовании.

Я хочу использовать NUMBER_VARIABLE как Limit для создания строк. Поэтому я поставил ${NUMBER_VARIABLE} в поле Limit.

Шаг 2: "Generate Rows" передается на шаг javascript / java, где я пытаюсь использовать DATE_VARIABLE, как показано ниже:

var sdf = java.text.SimpleDateFormat("yyyy-MM-dd",locale);
var myDate = sdf.parse(DATE_VARIABLE.getString());

Я ожидаю, что эта установка будет работать нормально. Если NUMBER_VARIABLE равно 100, предел для Generate Rows в следующем преобразовании должен быть установлен на 100, он должен генерировать 100 строк, а затем шаг javascript должен выполняться для этих 100 строк, и DATE_VARIABLE должен быть доступен внутри шага javascript для использования.

Когда я запускаю это задание, calculate_variables преобразование выполняется успешно. Но преобразование use_variables завершается ошибкой со следующей ошибкой:

2018/09/19 10:02:40 - Calculate Dimension Attributes.0 - ERROR (version 7.0.0.1-37, build 1 from 2016-12-21 12.39.46 by buildguy) : Unexpected error
2018/09/19 10:02:40 - Calculate Dimension Attributes.0 - ERROR (version 7.0.0.1-37, build 1 from 2016-12-21 12.39.46 by buildguy) : org.pentaho.di.core.exception.KettleValueException: 
2018/09/19 10:02:40 - Calculate Dimension Attributes.0 - Javascript error: 
2018/09/19 10:02:40 - Calculate Dimension Attributes.0 - ReferenceError: "DATE_VARIABLE" is not defined. (script#9)

Я не могу понять, почему это происходит, и что я могу сделать, чтобы исправить эту проблему.

Изменить 1:

Когда я прикрепляю к моему Generate rows шаг «Write to log» и пытаюсь записать переменные как:

__________________________ the variables are _______________________

number variable=${NUMBER_VARIABLE}
date variable=${DATE_VARIABLE}
____________________________________________________________________

И затем, когда я запускаю задание, я успешно печатаю переменные:

2018/09/19 10:11:20 - Write to log.0 - __________________________ the variables are _______________________
2018/09/19 10:11:20 - Write to log.0 - 
2018/09/19 10:11:20 - Write to log.0 - number variable=8662
2018/09/19 10:11:20 - Write to log.0 - date variable=2000-01-01
2018/09/19 10:11:20 - Write to log.0 - ____________________________________________________________________

Это означает, что переменные установлены правильно и доступны при следующем преобразовании. Почему шаг javascript жалуется на это?


person Vicky    schedule 19.09.2018    source источник
comment
Рад за то, что вы ее решили. Пожалуйста, ответьте на свой вопрос (а не редактируйте вопрос). Это для того, чтобы действительно помочь кому-то застрявшему, как ты.   -  person AlainD    schedule 19.09.2018


Ответы (1)


Я решил это. :)

Проблема заключалась в том, как я использовал переменную на шаге Javascript.

Я изменился на:

var myDateVariable=getVariable("DATE_VARIABLE","");
var sdf = java.text.SimpleDateFormat("yyyy-MM-dd",locale);
var myDate = sdf.parse(myDateVariable);

Надеюсь, это поможет кому-то застрять, как я!

person Vicky    schedule 21.09.2018
comment
Должен быть протестирован, SimpleDateFormat, это не потокобезопасный, не обязательный, но возможные значения ошибок при обработке огромного количества данных. - person simar; 16.10.2018
comment
@simar: не должно быть проблем, поскольку моя DATE_VARIABLE - это константа, которая будет использоваться всем ... - person Vicky; 17.10.2018