当前位置: 代码迷 >> 综合 >> Kettle 和 SSIS 的区别研究 (Kettle 循环遍历)
  详细解决方案

Kettle 和 SSIS 的区别研究 (Kettle 循环遍历)

热度:80   发布时间:2023-12-09 22:58:38.0

Pentaho Kettle 是开源免费的 ETL 工具

SSIS 是微软BI三件套之一

 

两者有很多相似的特点, 比如都是基于图形界面的控件加剪头的方式直观地来进行开发。在SSIS中具体负责数据流传输的控件叫“Data Flow”,而在Kettle里叫“Transformation”。“Data Flow”之上一层的包含很多逻辑判断和预处理的在SSIS里叫“Container”,在Kettle里这个东西叫"Job"。“Job“可以嵌套”Job“,所以Kettle没有SSIS里”package“这个概念了。

 

Kettle 提供了专门用来实现记录日志的 ”Write to Log“ 控件,这是SSIS没有的,在编译调试的时候很方便。在Kettle里每个Job都需要从一个叫"Job Start"的控件发起执行。最后是否执行成功有专门的”Success“和”Abort Job“控件来指明,这比SSIS多了很多自由度,SSIS有复杂的抛错机制(Propagate)。此外SSIS的每个控件有专门的属性,当这个控件在循环过程中抛出一定数量的错误后就自动将整个package定为失败,而Kettle则是要通过自己维护变量来实现类似的功能的。

两者在实现渐变维度的功能上还是很类似的,都实现了kimball的两种渐变维度的type,直接update或者维护历史,通过一个专门的字段来决定当前采用的一行数据。

还有一个比较大的区别,就是在循环遍历的实现方式上。对于SSIS来说有专门实现遍历的”Container“,而对于Kettle来说实现这个遍历的方式是将要遍历的结果集当作Job的参数传进去,找到具体实现遍历的Job右键setting来配置参数,比如要遍历的结果集有两列就要配置两个对应的参数。然后属性页中有个Checkbox叫"Execute for every input row"(新版本是"execute every input row")。意思就是当输入的Parameter是一个 dataset 时,把 dataset 的每一行都当作一次参数。选中它以及另一个Checkbox叫“Copy preivious results to parameters?”再去Parameters标签页里配好参数对应哪一列。

sub job是唯一的Kettle循环遍历方式.Transformation不行.

生成要遍历的list, 并把结果输出到job, 以备后续的job来遍历:

 

在具体每次迭代的job里配置:

因为Kettle实现遍历的方式与SSIS不同,语言不是很方便来描述,提供一个参考项目:

http://pan.baidu.com/s/1nvkDKU1

 

  相关解决方案