工作中需要用到Kettle来做数据报表,编写SQL语句读数据库,将数据写到Excel里,有时候一条SQL会实现不了,就需要用到循环,一种是在转换(ktr)中循环,一种是在作业(job)中循环。
转换中循环
![a4e2706b8a8e881d8ceaa88f1ad38481.png](https://img-blog.csdnimg.cn/img_convert/a4e2706b8a8e881d8ceaa88f1ad38481.png)
如图CSV文件里设置变量,将流字段输入到表输入里,需要设置,替换SQL语句里的变量,也就是用来替换$占位符所表示的数据,执行每一行,需要CSV文件里设置一列数据,这样转换就可以读取CSV里一个字段,执行一次表输入,依此类推。
![81d5fcfd91f70d6f488c98ae298db4d3.png](https://img-blog.csdnimg.cn/img_convert/81d5fcfd91f70d6f488c98ae298db4d3.png)
作业中循环
![2a5cdd67ef3f4fc00cd866418328b6ca.png](https://img-blog.csdnimg.cn/img_convert/2a5cdd67ef3f4fc00cd866418328b6ca.png)
主要是第三行,首先设置需要循环的变量,在自定义常量数据里,设置好元数据和数据,然后复制记录到结果。这里需要注意设置变量需要做以下设置,目的将变量参数传递到下一个转换!
![6f1ff4bf0cccb0b545473465a41c6702.png](https://img-blog.csdnimg.cn/img_convert/6f1ff4bf0cccb0b545473465a41c6702.png)
![74f46ea91ccd5dc0d116d12001d46979.png](https://img-blog.csdnimg.cn/img_convert/74f46ea91ccd5dc0d116d12001d46979.png)
接着执行查询作业,查询需要设置两处,一处是执行每一个输出行
![ce58c6ce23ea4c95f1b8b8ae41aabac5.png](https://img-blog.csdnimg.cn/img_convert/ce58c6ce23ea4c95f1b8b8ae41aabac5.png)
一处是设置命名参数
![821907f7f4e4f6dba29a64fcc4e3ddcb.png](https://img-blog.csdnimg.cn/img_convert/821907f7f4e4f6dba29a64fcc4e3ddcb.png)
最后在查询步骤内部获取命名参数
![795610b991ab51bccfaf292f04046874.png](https://img-blog.csdnimg.cn/img_convert/795610b991ab51bccfaf292f04046874.png)
这样,就可以将之前设置的变量,一行一行输入到需要查询的转换里了。这种方法可以解决我之前提出的问题。 工作中使用Kettle进行数据抽取时遇到问题,麻烦各位大佬给看看有没有更好的思路?