在使用Kettle开发时 ,有些时候在一个作业当中, 第二个转换需要用到第一个转换执行之后的结果作为参数传给第二个转换继续执行。
网上关于Kettle的帖子教程很乱很杂,经常看很长时间解决不了问题。今天实际开发中用到了,所以打算写下这篇帖子
作业(job)中两个转换(tran)传参
场景:
作者做ETL开发时,老大给过来一个项目当中一个业务的接口文档
做了近三个月使用kettle做ETL,发现接口数据源真的是什么类型都有。
这个接口属于麻烦一点的,首先根据apiId和secret两个参数去请求一个home.url得到一个token,这个token是有时间限制的相当于令牌。拿到这个令牌,再去将这个token作为参数请求子url得到具体的数据
老大从来是给一个接口文档,具体实现就需要你去想了,所以做出来的脚本执行效率,稳定性,耦合度就都是由你决定,前提是符合公司开发规范。
我首先想到的两种方法
方法一
在每个功能转换中,都加入获取token步骤
方法二
将获取token作为单独的一个转换。把具体功能作为一个转换,在一个作业中,转换一为获取token,转换二为解析获取数据
下图 获取token的转换
下图 获取数据的转换
下图合并两个转换的job
我觉得还是第二种稍微好一点,拆分成两个既降低了耦合度,又减少了重复代码
但是实际中就遇到了 作业(job)中两个转换(tran)传参 的问题
这里推荐一本书 最近学习kettle 都是在看这本书自学
Kettle开发者写的书,也是市面上kettle书籍为数不多中的选择,不光讲了kettle开发技术,也讲了很多ETL,数据质量方面的思想和解决方案。
到正题了
具体怎么传参
在第一个转换中 使用 设置变量 组件 设置流中的字段 案例中作者即设置token字段
在第二个转换中 使用 获取变量 组件 获取字段 案例中作者获取的为token字段
其他字段为类似表输入select ‘${}’ 这种写法去获得设置在转换中的全局变量
第二个转换 双击空白的全局变量
在作业中第二个转换双击打开命名参数,这里相当于这个转换的入参
运行作业ojbk
感谢大家看我废话
2020年7月13日18:39:42 下班下班
觉得作者没讲明白或是有疑问请留言呀