Hive 中带有 Join 或 Where 子句的条件
Posted
技术标签:
【中文标题】Hive 中带有 Join 或 Where 子句的条件【英文标题】:Condition with Join or Where Clause in Hive 【发布时间】:2015-09-15 14:29:16 【问题描述】:我想了解 hive 如何执行这两个查询。我们在 Hive 中有任何查询优化器吗?
select * from A JOIN B on A.a = B.b
select * from A JOIN B where A.a = B.b
请告诉我 Hive 查询是如何执行的(工作流程)?
提前致谢。
【问题讨论】:
【参考方案1】:不幸的是,Hive 似乎在这里没有做任何好的后端优化。我给自己写了几个例子,并比较了阶段计划和抽象语法树。
select * from A JOIN B on A.a = B.b
在上述查询中,hive 找到 A.a = B.b 的位置,然后将两者连接在一起。
select * from A JOIN B where A.a = B.b
在此查询中,hive 在每个值上将 A 连接到 B - hive 执行交叉连接,这是一个大规模的映射阶段(假设您的表很大)。然后在 reduce 阶段,hive 过滤掉 A.a != B.b
的行【讨论】:
感谢@Charlie Haley 的回复。能否请您告诉我获取阶段计划和抽象语法树的方法? 如果表 A 和 B 已经在 hive 中,只需输入说明(在此处插入查询); 如果你能解释一下,请告诉我hive中的查询执行流程是什么?以上是关于Hive 中带有 Join 或 Where 子句的条件的主要内容,如果未能解决你的问题,请参考以下文章
在 from 子句或 where 子句中进行 equi join 是不是更好