DataStage Join

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的分区方法。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值