连表操作应该算是程序员的入门基础吧,但自嘲的说,长时间不使用的话,难免还是会有生疏。
hive
上连表操作的查询,是通过map-reduce
的方式执行的。正常情况下,hive
应该会对每个JOIN
操作启动一个map-reduce
任务。
JOIN
的操作也是从左到由执行的。一般来说,习惯将最大的数据表放在最后。因为,在对每行数据记录进行关联操作时,它会尝试将其它表缓存起来,然后扫描最后的表进行计算。
在执行JOIN
的关键字on
之后,是否可以跟过滤条件?对比下面两个查询
查询一
select * from topic_relation r join note on r.note_id = note.id and note.type = 1
查询二
select * from topic_relation r join note on r.note_id = note.id where note.type = 1
基本上SQL
中都是先执行JOIN
语句,然后再将结果通过where
语句进行过滤。所以,我理解,这两个查询语句的执行效率是一样的。
还有感觉比较值得思考的,善用子查询。
来源:oschina
链接:https://my.oschina.net/u/3017278/blog/3193673