Pentaho 数据集成 setVariable 和 getVariable 问题

Pentaho Data Integration setVariable and getVariable issue

我有一份工作,在一行中进行以下转换:

1) 开始

2) calculate_variables

3) use_variables

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} 放在了 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改造运行s成功。但是,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 步骤抱怨它?

我解决了。 :)

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

我改为:

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

希望这能帮助像我一样陷入困境的人!