程序员的自我修养
Home » Apache Hive » Hive关于Full Join的疑问

Hive关于Full Join的疑问

2条评论4,619次浏览

Join与filter的顺序

根据官方文档的说法,join发生在前,filter发生在后。所以如果这样写join sql则会先将整个表join然后在按照where条件过滤:

显然这样背离了初衷。正确的写法应该是:

两种写法虽然感觉是一样的意思,理论上计算出来的结果应该也是一样。但通过实际应用,发现结果居然是不一样的,两者的结果数量可能会相差一个数量级以上,而输出正确的是第二种写法。至于为何第一种写法会出现不一样的结果,等有时间了在研究下。感觉应该是数据的问题,而不是hive有bug。

从日志也可以看到两种语句的map数量不一样,第一种会扫描全表,而第二种只扫描where条件中的特定的partition。

然而以上都不是重点

根据官方文档的说法:

也就是说join和filter的顺序对RIGHT和FULL join都适用。但是实际上,full join完全不适用。

以下三种写法,全部都是全表扫描!!

如何才能正常的玩耍?只能这么写:

这样写才能正常的只扫描特定的partition。这一定是个bug!这一定是个bug!这一定是个bug!(自我催眠中)

(转载本站文章请注明作者和出处 程序员的自我修养 – SelfUp.cn ,请勿用于任何商业用途)
分类:Apache Hive
标签:
2条评论
  1. ashley说道:

    何总吉祥。。。

发表评论给匿名


profile
  • 文章总数:81篇
  • 评论总数:373条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1558天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论