一.变量的类型
Kettle 的早期版本中的变量只有系统环境变量,新版本变量一般包括系统环境变量, “Kettle变量” 和内部变量三种系统环境变量的影响范围很广,凡是在一个 JVM下运行的线程都受其影响.
1.环境变量
通过 set variables组件设置变量,范围可以是:JVM变量、作业变量、父作业变量、根作业变量。使用时通过
${var}
或%%var%%
变量方式引用变量
2.属性文件变量
在.kettle目录下的kettle.property
文件中设置,可kettle中可以引用
3.命令行参数(相当于位置参数)
命令行参数是指用pan执行转换时传入的参数,在sql中用可以用?占位,也叫位置参数
注意:
不管哪种参数都可以在sql中用${var}
或者%%var%%
表示
二、变量的设置
1.设置环境变量
job:
编辑【设置变量】组件:
注意:
要注意一点:如果用转换封装变量,选择valid in the root
job,则在job中无法使用这些变量。如果改成在JVM中生效则可以使用。
转换:
表输入:
案例可以参考博文《kettle环境变量的配置》
2.设置属性文件变量
该属性文件位于 ${user.home}.kettle
下
例如:C:\Users\Administrator.kettle\kettle.properties
以window为例
编辑C:\Users\用户名.kettle目录下的kettle.properties
文件,写入:
customerNumber=124
然后重启spoon(kettle)
转换:
表输入:
3.设置命令行参数变量
转换:
获取系统信息:
表输入:
三.SQL查询中使用kettle变量
案例:
表输入步骤支持替换查询中的变量或参数,假设有一系列结构完全相关的表,分别是: mammals, birds, insects(动物、鸟、昆虫),可以使用kettle变量作为表的名称。
假设我们有一个变量,名称为:ANIMALS_TABLE,赋值为birds,我们设置“Replace Vaiables”选项选中。如果我们写下面的查询:
SELECT name,population FROM ${ANIMALS_TABLE}
在执行一定被成功的替换成:
SELECT name,population FROM birds
如果设置变量的值为“mammals”或“insects”,则将动态查询不同的表。当占位符不能胜任是,使用变量技术可以帮助我们解决。示例的名称为variables.ktr,运行时不要忘了给parameter(命名参数)赋值进行测试。
四.变量和占位符一起使用
如果有必要,我们可以混合这两种技术;本示例中使用变量作为表名词,同时使用占位符作为前面步骤的输入值。示例文件variables_and_placeholders.ktr。
SELECT name, population FROM ${ANIMALS_TABLE}WHERE population > ?