hive join ..on连接中 and与where的取舍

HiveQL与标准SQL的区别:

陷阱1:

SELECT *

FROM first_table t1

JOIN second_table t2

ON t1.id = t2.id

where t1.date = "2016-06-01"


在hive里面,没有SQL优化器,则这样些的后果是,直接将t1表与t2表全量连接,产生大量的MapReduce操作再进行过滤

正确写法:

SELECT *

FROM

( SELECT * FROM first_table WHERE date = "2016-06-01") t1

JOIN second_table t2

ON t1.id = t2.id;


其实上面的语句还不是最好的,因为hive通常处理的都是大数据表,上亿至少小case。hive sql里不推荐用嵌套子查询语句,就是为了减小查询负担。

更优的写法是join...on 后面,用and代替where。为什么?用and的话,查询是先过滤条件,得到一个较小的表,然后再跟其他表联合。这样,无形中,就能节省下不小的运算量,自然就更快了!

更优的写法:

SELECT *

FROM first_table t1

JOIN second_table t2

ON t1.id = t2.id

and t1.date = "2016-06-01";


好!本文到底了~谢谢大家的阅读! 如果大家有建议和指教,请在下方的评论里,发表您的高见。或者私信我,也OK啦!

你可能感兴趣的:(hive join ..on连接中 and与where的取舍)