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啦!