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_date
和 some_date
来完成一些计算并得出两个结果变量。一个是作为字符串的数字,另一个是作为字符串的日期。在 javascript 步骤结束时,我有以下语句:
setVariable("NUMBER_VARIABLE", calculatedNumber, "r");
setVariable("DATE_VARIABLE", calculatedDate, "r");
我对Pentaho的了解有限。但据我所知,这会创建两个新变量 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
改造运行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);
希望这能帮助像我一样陷入困境的人!
我有一份工作,在一行中进行以下转换:
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_date
和 some_date
来完成一些计算并得出两个结果变量。一个是作为字符串的数字,另一个是作为字符串的日期。在 javascript 步骤结束时,我有以下语句:
setVariable("NUMBER_VARIABLE", calculatedNumber, "r");
setVariable("DATE_VARIABLE", calculatedDate, "r");
我对Pentaho的了解有限。但据我所知,这会创建两个新变量 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
改造运行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);
希望这能帮助像我一样陷入困境的人!