最近用到了kettle中的变量,说一下我碰到的一些问题
1、变量(variable)
这个是整个流程图

第一个转换如下:

首先得到CODE='3333'的记录,查询结果是1条(只有在查询结果只有1条时才能设置变量,如果有多条记录传入设置变量控件,会报‘一个输入记录期待设置变量并且至少已经收到2个变量’的错误),将查询结果的CODE作为变量:


第二个转换如下

将变量传入SQL,查询CODE='02'的记录,将记录复制到结果

注:看到之前版本有人说变量引用那边要加引号'${CODE}',我这里试了一下,我用的8.2版,加不加都可以,但是如果参数值变成中文就不行了,后面会讲到。
第三个转换如下:

获取之前的查询结果,输出到文本文档,文档内容如下:

这边可以在第二个转换直接输出到文本文档,但是我这边想测试一下将记录复制到结果和从结果获取记录这两个是不是必须成对出现,经过测试,如果不先将记录复制到结果,从结果获取记录的结果为空,所以这两个需要成对出现。
作业里的设置变量和获取变量不用成对出现,上面那个例子就只有设置变量,试一下用获取变量的效果。

将获取变量连接到字段选择,字段选择中会出现该字段

引用的时候可以选择从步骤插入数据,用问号作为引用

注:
作业(包含2个转换):作业中设置的变量,在两个子转换中都可以读取到(设置变量有效范围在根作业)
作业(包含2个子作业):父作业中设置的变量,在两个子作业的子转换中都可以读取到(设置变量有效范围在根作业)
2、命名参数(parameter):通过参数名读取参数值
除了设置变量,还可以指定命名参数
流程如下


在转换设置--命名参数中设置参数CODE,设定默认值等于01

现在要查询CODE='02',点击启动,填写值为02,如果不填值,会用默认值做查询

文本输出如下:

3、位置参数(argument):通过位置(命令行)读取参数值
选择获取系统信息控件,点击命令行参数,最多支持10个参数,这边设置了3个

现在要查询ID='2222',CODE='01',CITY='北京市'的记录,将结果输出到文本文件,整个流程如下:

表输入的内容如下:

三个?按照前一个步骤的结果一次传入,
点击启动--位置参数,填写参数值,

或者

第一个转换将位置参数设置成变量


第二个转换获取变量,输出到文本

注:这边如果图中圈出来的部分,不加引号的话,后面我给k3赋值北京市,不加引号会报‘不存在列北京市的错误’,测试了下只要是参数值是中文,不加引号就会报错,保险起见,还是加上好了。
点击作业启动-位置参数

文本输出

网友评论