我在一行中进行了以下转换:
1)开始
2)计算变量
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}
放入了“限制”字段。
第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步骤对此有所抱怨?
答案 0 :(得分:-1)
我解决了。 :)
问题是我在Javascript步骤中使用变量的方式。
我更改为:
var myDateVariable=getVariable("DATE_VARIABLE","");
var sdf = java.text.SimpleDateFormat("yyyy-MM-dd",locale);
var myDate = sdf.parse(myDateVariable);
希望这可以帮助像我一样困住的人!