大数据ClickHouse进阶(十一):ClickHouse的Join子句
ClickHouse的Join子句
Join子句可以对左右两张表的数据进行连接,join语法包含连接精度和连接类型两部分。参照下图帮助大家理解:
上图可知,连接精度分为ALL、ANY、ASOF三种,而连接类型分为外连接、内连接、交叉连接三种。我们对连接类型并不陌生,下面重点介绍连接精度。
为了方便测试,我们创建以下2张表:join_tbl1、join_tbl2,分别创建两张表,并插入数据:
一、连接精度
连接精度决定了join查询在连接数据时所使用的策略,目前支持ALL、ANY和ASOF三种类型。
- ALL
如果左表内的一行数据在右表中有多行数据与之连接匹配,则返回右表中全部连接的数据,操作如下:
- ANY
如果左表内的一行数据在右表中有多行数据与之连接匹配,则仅返回右表中的第一行连接的数据。操作如下:
- ASOF
ASOF是一种模糊查询,它允许在连接键之后追加定义一个模糊连接的匹配条件asof_column(此条件要求不等式,大于或者小于)。举例如下:
二、连接类型
连接类型与Mysql中的连接类型意思相同,这里就不再详解介绍,直接操作,操作如下:
- INNER
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL JOIN
- CROSS
CROSS JOIN 表示交叉连接,返回左表与右表两个数据集合的笛卡尔积,不需要指定JOIN key 连接键。
三、注意事项
在ClickHouse使用中,一般作为DWS或者DM层数据使用,很少会有JOIN操作。在使用JOIN查询时,为了优化JOIN查询性能,应该遵循左大右小的原则,即将数据量小的表放在右侧。这是因为在执行JOIN查询时,无论使用哪种JOIN连接方式,右表都会被全部加载到内存中与左表进行比较。
另外,join也没有缓存机制,每一次join查询就算是执行相同的sql查询,也会生成一次全新的查询计划。
- 点赞
- 收藏
- 关注作者
评论(0)