Pentaho数据集成setVariable和getVariable问题

时间:2018-09-19 02:05:11

标签: javascript pentaho kettle spoon

我在一行中进行了以下转换:

1)开始

2)计算变量

3)use_variables

enter image description here

calculate_variables转换

此转换包括3个步骤:

步骤1:Table input”步骤从数据库中读取单个值my_date

步骤2:Add constant values”步骤,它声明一个日期常量some_date

步骤3:Script Values / Mod”步骤是javascript / java步骤,它使用my_datesome_date进行一些计算并得出两个结果变量。一个是数字作为字符串,另一个是日期作为字符串。在javascript步骤的末尾,我有以下语句:

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

我对Pentaho的了解有限。但是据我所知,这将创建两个新变量NUMBER_VARIABLEDATE_VARIABLE,并将它们设置为root后可用于其他作业和转换。

use_variables转换

这是我要使用变量NUMBER_VARIABLEDATE_VARIABLE的地方。

步骤1:我将“ Generate Rows”作为此转换的第一步。

我想将NUMBER_VARIABLE用作“生成行”的Limit。因此,我将${NUMBER_VARIABLE}放入了“限制”字段。

第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:

当我在Write to log上附加“ Generate rows”步骤并尝试将变量记录为:

__________________________ 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步骤对此有所抱怨?

1 个答案:

答案 0 :(得分:-1)

我解决了。 :)

问题是我在Javascript步骤中使用变量的方式。

我更改为:

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

希望这可以帮助像我一样困住的人!