2014-10-09 94 views
-2

我想加入两个表,它们有一个共同的列和相同数量的具有相同排序的存储桶。如何实现Sort Merge Bucketing Map Join?

除了该设置,我是否需要设置除设置属性之外的其他任何条件?

set hive.optimize.bucketmapjoin = true; 
set hive.optimize.bucketmapjoin.sortedmerge = true; 
set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat; 

回答

0

如果您有两个数据集对于地图边连接来说太大,则加入这些数据集的一种有效方法是将两个数据集分为多个存储桶。

诀窍是使用相同的连接键进行聚类和排序。 (int,price float,quantity int)
CREATE TABLE order(int,price float,quantity int) CLUSTERED BY(cid)INTO 32 BUCKETS; (id),第一个字符串,最后一个字符串) CLUSTERED BY(id)INTO 32 BUCKETS;

这提供了两个主要的优化优势:

Sorting by join key makes joins easy ,all possible matches value resides on the same area on disk 

Hash bucketing a join key ensures all matching values reside on same node ,equi join can then run with no shuffle . 
+0

感谢user3484461 – koundinya 2014-10-13 21:24:23

+0

以上回答给了我一个想法。感谢user3484461 – koundinya 2014-10-15 15:53:25