介绍
在对多表进行查询时,不可避免的会涉及到JOIN操作,但是由于存在多种类型的JOIN,有时会令人困惑。
本文首先会对常见的JOIN进行描述,由于分布式系统使用Presto对外提供查询接口,接着会介绍Presto中关于JOIN的一些独有的特性。最后列出了几个通用的JOIN的优化策略
常见的JOIN操作
为了方便演示,通过下面两张表进行演示
TableA
| id | name |
|---|---|
| 1 | Pirate |
| 2 | Monkey |
| 3 | Ninja |
| 4 | Spaghetti |
TableB
| id | name |
|---|---|
| 1 | Rutabaga |
| 2 | Pirate |
| 3 | Darth Vader |
| 4 | Ninja |
Inter Join
Inter Join产生的结果是A和B的以On交集。
语句:
SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
Inter Join 包含两种:
- 显示(explicit) :就是上面这种方式
- 隐式(implicit):语句形式为SELECT * FROM TableA,TableB where TableA.name = TableB.name
多数情况下上面两种方式没有差别,但是建议使用第一种
结果:
| id | name | id | name |
|---|---|---|---|
| 1 | Pirate | 2 | Pirate |
| 3 | Ninja | 4 | Ninja |
图例:
Left Join(left outer join)
Left outer join产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
语句:
SELECT * FROM TableA
LEFT OUTER JOIN TableB

本文详细介绍了JOIN的各种类型,包括Inter Join、Left Join、Right Join、Full Join和Cross Join,并给出了实例解析。重点讨论了Presto的多数据源JOIN特性,以及在Presto中进行JOIN操作的优化策略,如调整表的JOIN顺序、在LEFT JOIN中优先使用ON条件等。
最低0.47元/天 解锁文章
5241

被折叠的 条评论
为什么被折叠?



