我是靠谱客的博主 忐忑月光,这篇文章主要介绍hive 连接查询优化,现在分享给大家,希望可以做个参考。

1.每个join都会启动一个mapreduce

如果连接字段是同一个字段,则会进入同一个reduce

 

2.hive会默认最后一个表为数据量最大的表,所以会将前面的表进行缓存

所以进行连接查询的时候,将表从小到大连接

 

3.如果查询中不想将大表放到最后,可以使用查询暗示,指定哪张表示最大的

select /* +streamtable(c) */ c.id,c.name
from custorm c join order o on o.cid=c.id

 

 

 

内连接

直接join,只有复核连接条件的才会被查询出

 

左外连接

left outer join,左边的记录会全部显示

 

右外连接

right outer join 右边的记录会全部显示

 

全外连接

full outer join 笛卡尔积

 

左半连接

只要右表有符合条件的数据,就会返回左边的数据,不会全表扫描

LEFT SEMI JOIN (左半连接)是 IN/EXISTS 子查询的一种更高效的实现。

查询结果不能出现右表字段

select * from a where a.id in (select id from b ) 可以改为 select * from a left semi join b on a.id = b.in

 

 

最后

以上就是忐忑月光最近收集整理的关于hive 连接查询优化的全部内容,更多相关hive内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(110)

评论列表共有 0 条评论

立即
投稿
返回
顶部