KETTLE数据同步方法


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默认是没有的

  • 右键的菜单中,可选择 "转化属性", 在"命名参数" 中加入你的参数即可