当前位置:   article > 正文

DataStage Join_join stage missing data

join stage missing data
2012-04-09 22:29

Lookup Stage和Join Stage在DataStage EE中的使用

Lookup Stage和Join Stage是十分好用的两个Stage,在工作中会经常会用到,但是如果采用的分区方法不恰当,则会造成错误的结果。我们先来看一个例子。
假设服务器配置为两个Node,有如下两个表:
员工销售表
EmpId ProductId Amount
1        1        100 
1         2        450
2        1        250
2        2        234
3        1        340

员工信息表
EmpId        Name
1        John
2        Jack
3        Bill

假设采用Round robin分区方式
员工销售表.Partition1
EmpId ProductId Amount
1        1        100
2        1        250
3        1        340

员工销售表.Partition2
EmpId ProductId Amount
1        2        450
2        2        234

员工信息表.Partition1
EmpId        Name
1        John
3        Bill

员工信息表.Partition2
EmpId        Name
2        Jack

因为计算只发生在同一个分区中,即:员工销售表.Partition1与员工信息表.Partition1进行运算(这里丢失了2        1        250这条员工销售数据),员工销售表.Partition2与员工信息表.Partition2进行运算(这里丢失了1        2        450这条员工销售数据)。可以看到,采用Round robin分区方式造成了数据的丢失

如果采用Hash分区方式,则
员工销售表.Partition1
EmpId ProductId Amount
1        1        100
1        2        450
3        1        340

员工销售表.Partition2
EmpId ProductId Amount
2        1        250
2        2        234

员工信息表.Partition1
EmpId        Name
1        John
3        Bill

员工信息表.Partition2
EmpId        Name
2        Jack

可以看到,运算结果是正确的。

总结:在Lookup和Join中,采用什么分区方法有一个原则,即关键字字段具有相同特征的数据必须分到同一个分区中(例如关健字为单数的分到Partition1,关健字为双数的分到Partition2)。可见,不适用的分区方法有Auto、Random、Round robin、Same、DB2,因为它们有可能造成数据的丢失,适用的分区方法有Entire(适合于某个表的数据量比较少的情况)、Hash、Modulus、Range。一般来说,推荐使用Hash的分区方法。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号