kjb和ktr的选择
kettle的数据同步, 你会用到ktr和kjb
ktr中的数据流动不是阻塞的, 是并行执行的, 如果你使用如下:
"表输入" --> "表输出" --> "执行SQL脚本"
这样"执行SQL脚本" 会被执行很多次,
但kjb不一样, kjb会等待一个组件完成再执行另外一个, 所以很多人 会使用kjb 嵌入 ktr的解决方案来做数据抽取后执行脚本
但是如果已经有了任务的调度平台, 再用kjb 来 嵌套 ktr 的解决方案 就会显得臃肿, 所以可以考虑直接在ktr完成
以下为解决方法:
在需要阻塞的地方加入 "阻塞数据" 的组件, 将"Pass all rows" 取消勾选, 在"执行SQL脚本"的地方将 "执行每一行" 勾选
另外注意, 此执行sql不是马上commit的, 所以如果是多行语句, 比如impala的任务, 请尽量在执行完每一条后加上 refresh table的命令
参数设定
采用了我们的smartpip任务调度平后, 向ktr/kjb传递参数变得非常方便
那么如何在kettle中进行配置
- 首先你需要在SQL语句中加入参数, 语法 ${xxxx}, 注意务必把 "替换SQL语句里的变量" 勾选, kettle默认是没有的
- 右键的菜单中,可选择 "转化属性", 在"命名参数" 中加入你的参数即可