我有多个表A,表B和表C。我希望能够使用Hive的存储桶式 map 联接。我知道A,B,C的存储桶应该是彼此的倍数。
在创建表时是否有估算所需的#bucket的通用规则,以确保在 map 侧进行联接?
最佳答案
我没有在生产中使用Bucket Map Join,因此仅基于存储桶映射联接的原理进行一些推断。
在存储桶联接中,将两个表中的相关存储桶联接在一起,使用小表的存储桶构建哈希表,并按原始顺序逐个迭代大表的存储桶文件,在内存中探测哈希表并生成联接结果。
因此,我认为small table's each bucket should be small enough to put in memory
(您在mapred-site.xml中设置的 map 位的堆大小)。小桌子越大,则应为其设置更多的存储桶。
我认为大表的存储区号可以是任意数,只是小表的存储区号的倍数。
关于join - 确定Hive的桶联接的桶,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23039479/