排序合并Bucket Join与Sort Merge Bucket不同 Map join?如果是这样,应该添加什么提示以启用SMB加入? SMBM如何优于SMB加入?
将"设置为hive.auto.convert.sortmerge.join = true"这个提示单独就足以让SMB加入?否则,还应包括以下提示。
设置hive.optimize.bucketmapjoin = true set hive.optimize.bucketmapjoin.sortedmerge = true
我问的原因是,提示说Bucket map join,但是这里没有执行MAP join。我假设map和reduce任务都涉及SMB,而SMBM只涉及map任务。
如果我错了,请纠正我。
答案 0 :(得分:6)
如果您的表很大(由“set hive.mapjoin.smalltable.filesize;”确定),则无法进行地图侧连接。除了你的表被分区和排序,并且你打开“set hive.optimize.bucketmapjoin.sortedmerge = true”,你仍然可以在大型表上进行地图侧连接。 (当然,你还需要“set hive.optimize.bucketmapjoin = true”)
确保您的表格是真正的分块并在同一列上排序。犯错很容易。要获得一个分区和排序的表,您需要
DDL脚本
CREATE table XXX
(
id int,
name string
)
CLUSTERED BY (id)
SORTED BY (id)
INTO XXX BUCKETS
;
INSERT OVERWRITE TABLE XXX
select * from XXX
CLUSTER BY member_id
;
使用describe formatted XXX
并查找Num Buckets, Bucket Columns, Sort Columns
以确保其设置正确。
存储桶连接的其他要求是两个表应该
如果满足所有要求,则将执行MAP连接。它会闪电般快速。
顺便说一下,Hive 1.X for ORC格式不支持SMB Map Join。你会得到一个null exception。该错误已在2.X中修复。