我想了解hive如何执行这两个查询。我们在Hive中有任何查询优化器吗?
select * from A JOIN B on A.a = B.b
select * from A JOIN B where A.a = B.b
请告诉我如何执行Hive查询(工作流程)?
提前致谢。
答案 0 :(得分:3)
不幸的是,看起来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
的行