Join 配置单元排序合并桶联接

Join 配置单元排序合并桶联接,join,hive,Join,Hive,排序合并桶连接与排序合并桶映射连接不同吗?如果是,应添加哪些提示以启用SMB加入?SMBM加入如何优于SMB加入 是否将设置hive.auto.convert.sortmerge.join=true仅此提示就足以让SMB加入?除此之外,还应包括以下提示 设置hive.optimize.bucketmappjoin=true 设置hive.optimize.bucketmappjoin.sortedmerge=true 我询问的原因是,提示说Bucket map join,但这里不执行map jo

排序合并桶连接与排序合并桶映射连接不同吗?如果是,应添加哪些提示以启用SMB加入?SMBM加入如何优于SMB加入

是否将设置hive.auto.convert.sortmerge.join=true仅此提示就足以让SMB加入?除此之外,还应包括以下提示

设置hive.optimize.bucketmappjoin=true 设置hive.optimize.bucketmappjoin.sortedmerge=true

我询问的原因是,提示说Bucket map join,但这里不执行map join。我假设map和reduce任务都涉及SMB,而SMB中只涉及map任务


如果我错了,请更正。

如果您的表是由set-hive.mapjoin.smalltable.filesize;,确定的大表;,不能进行地图边连接。除了您的表已进行了装箱和排序,并且启用了set hive.optimize.bucketmapjoin.sortedmerge=true之外,您仍然可以在大型表上进行地图侧联接。当然,您仍然需要设置hive.optimize.bucketmappjoin=true

确保您的表格是真正的扣和排序在同一列。犯错误很容易。要得到一张带扣和分类的桌子,你需要

设置hive.exforce.bucketing=true; 设置hive.exforce.sorting=true; DDL脚本

创建表XXX id int, 名称字符串 按id聚集 按id排序 放入XXX桶中 ; 插入覆盖表XXX 从XXX中选择* 按成员id分类的群集 ;

使用descripe formatted XXX并查找Num Bucket、Bucket Columns和Sort Columns,以确保其设置正确

bucket联接的其他要求是两个表应该具有

数据扣在同一列上,并在on子句中使用。 一个表的存储桶数必须是另一个表的存储桶数的倍数。 如果满足所有要求,则将执行映射联接。而且会是闪电般的快


顺便说一句,在用于ORC格式的Hive1.X中,SMB映射联接没有得到很好的支持。你会得到一份工作。这个bug已经在2.X中修复。

分区如何?扣件是否分别应用于每个分区?在这种情况下,我们将具有很好的可伸缩性:复杂性降低了P*B,其中P=分区,B=每个分区的存储桶。我没有尝试,但我认为它也适用于分区,因为分区只是一个包含实际数据文件的路径/目录,在阅读了更多内容后,应该将其应用于每个分区:例如,64个存储桶将应用于每个分区是的,正确!每个分区都有指定数量的存储桶。因此,假设分区键列有10个不同的分区值,并且您将存储桶的数量定义为128个,那么总共有1280个文件夹代表整个数据集!