为啥 Hive 不支持 non-equi join?
Posted
技术标签:
【中文标题】为啥 Hive 不支持 non-equi join?【英文标题】:Why Hive can not support non-equi join?为什么 Hive 不支持 non-equi join? 【发布时间】:2020-10-07 01:54:15 【问题描述】:发现Hive不支持non-equi join,是不是因为non-equi join转Map reduce比较难?
【问题讨论】:
【参考方案1】:是的,问题出在当前的 map-reduce 实现中。
在 MapReduce 中如何实现常见的 equi-join?
输入记录以块的形式复制到映射器,映射器产生键值对的输出,这些键值对被收集并使用某种功能在减速器之间分发,每个减速器将处理整个键,换句话说,映射器为每个按 key 分组的 reducer 创建一个 key-values 列表。 Reducers 复制 mappers 的输出,对其进行排序以获得
考虑非等连接:例如我们需要在 A.key
如果reducer 将接收每个带有B.key < A.key
的A.key B 元组,那么它将导致reducer 上的大量数据重复。例如,如果我们有 A 键 (1, 2, 3) 和 B 键 (1,2,3),那么对于 A.3,我们需要 [A.1, A.2, A.3]
。对于 A.2,我们需要 [A.1, A.2]
。换句话说,映射器需要为每个特定键生成一个副本,映射器为不同键生成的列表将重叠。我们拥有的不同键越多,重复的次数就越多。
阅读本文以深入了解问题和可能的解决方案:Processing Theta-Joins using MapReduce
【讨论】:
非常感谢。你的回答给了我很多启发。以上是关于为啥 Hive 不支持 non-equi join?的主要内容,如果未能解决你的问题,请参考以下文章