我们在很多场景下都需要用到设置变量组件,比如在分页查询数据时,然后分批次写入数据时,都需要事先定义好变量,一般作为作业中起始组件,设置变量的作业举足轻重,这考验你在一个完成的ETL过程中的逻辑能力,你的ETL是否能正常完美的执行,和开始设置的变量有很重要的关系.
作业中的设置变量组件如下:
我们可以通过设置变量组件中的变量以.properties
文件的方式引入
可以指定属性文件名为F:\bak\testkettlevariable.properties
然后在指定我们的变量名范围,那么我们接下来的整个ETL过程中都可以使用该变量
使用文件的方式引入变量如下:
我们在配置文件中设置我们的变量,如下图:
我们的JavaScript脚本中打印出变量,脚本内容如下:
var name=parent_job.getVariable("TEST_NAME");
var version=parent_job.getVariable("TEST_VERSION");
var subject="自定义日志输出";
//实例化工厂类
var logFactory = new org.pentaho.di.core.logging.LogChannelFactory();
//实例化日志channel对象
var log= logFactory.create(subject);
//日志输出
log.logMinimal("name:"+name+",version:"+version);
true;
脚本内容很简单,获取我们在文件中定义的变量,然后通过日志输出,最后运行,控制台打印如下:
因为我们是在脚本中使用,使用的是Kettle的内置对象parent_job
的getVariable
方法拿到当前ETL中的变量,如果在后面组件中,可以是拥有$
符号的输入框中通过${variable_name}来引用,或者使用%variableName%
另外,我们在组件中也可以看到组件的作用范围,主要有四种:
- 当前作业有效:代表的是当前作业
- 在JVM中有效:Kettle由于是Java编写,而Java程序运行是在JVM中运行的,因此如果设置在JVM中有效则相当于是全局有效,因为整个ETL过程都是在JVM平台上作用的
- 在父作业中有效:父作业中有效
- 在根作业中有效:根作业有效