1 ALL 子句
2 ARRAY JOIN
使用别名 :在使用时可以为数组指定别名,数组元素可以通过此别名访问,但数组本身则通过原始名称访问
3 DISTINCT子句
DISTINCT
不支持当包含有数组的列
4 FROM子句
FROM 子句指定从以下数据源中读取数据:
1.表
2.子查询
3.表函数
JOIN 和 ARRAY JOIN 子句也可以用来扩展 的功能FROM
子查询是另一个 可以指定在 后的括号内的查询。
FROM 子句可以包含多个数据源,用逗号分隔,这相当于在他们身上执行 CROSS JOIN
5 GROUP BY子句
6 HAVING 子句
允许过滤由 GROUP BY 生成的聚合结果. 它类似于 WHERE ,但不同的是 在聚合之前执行,而 之后进行。
可以从 生成的聚合结果中通过他们的别名来执行 子句。或者 子句可以筛选查询结果中未返回的其他聚合的结果。
限制HAVING如果不执行聚合则无法使用
7 Join
支持的联接类型
所有标准 SQL JOIN 支持类型:
INNER JOIN,只返回匹配的行。
LEFT OUTER JOIN,除了匹配的行之外,还返回左表中的非匹配行。
RIGHT OUTER JOIN,除了匹配的行之外,还返回右表中的非匹配行。
FULL OUTER JOIN,除了匹配的行之外,还会返回两个表中的非匹配行。
CROSS JOIN,产生整个表的笛卡尔积, “join keys” 是 不 指定。
semi: 类似于mysql的exists、in查询
anti :类似于mysql的not exists、not in查询
ASOF 是一种模糊连接,允许在连接键之后追加定义一个模糊连接的匹配条件asof_column
ASOF会先以 left.key = right.key 进行连接匹配,然后根据AND 后面的 closest_match_cond(也就是这里的a.time >= b.time)过滤出最符合此条件的第一行连接匹配的数据。
对 asof_colum 字段的使用有3点需要注意:
必须包含一个有序的序列
asof_column 必须Int, UInt, Float, Date, DateTime, Decimal.
asof_column不能是数据表内的唯一字段,也就是说连接键(JOIN KEY)和asof_column不能是同一字段
分布式join
ClicHouse分布式join通常涉及到左右表为分布式表,分布式执行过程中需要将数据在节点间进行交换,将数据在节点间交换的动作在分布式执行计划中称为数据的流动streaming算子,ClickHouse支持的streaming算子有如下三种:
Broadcast Join 数据广播算子
Shuffer Join 数据重分布算子
Colocate Join 数据存储在本地不需要进行分布式交换
GLOBAL JOIN
Colocate Join
8 Limit
LIMIT m 允许选择结果中起始的 行。m
LIMIT n, m 允许选择个 从跳过第一个结果后的m 行。与 语法是等效的。mnLIMIT m OFFSET n
n 和 必须是非负整数。m
如果没有 ORDER BY 子句显式排序结果,结果的行选择可能是任意的和非确定性的
9 Limit by
10 Order by
11 Where prewhere
.PREWHERE与WHERE不同之处在于:使用PREWHERE时,首先只会去PREWHERE指定的列字段数据,用于数据过滤的条件判断。在数据过滤之后再读取SELECT声明的列字段以补全其余属性。所以在一些场合下,PREWHERE相比WHERE而言,处理的数据更少,性能更高。
clickhouse提供了自动
.
.
化优化的功能,会在条件合适的情况下将where替换为prewhere。默认已经开启了此参数
.
12 Sample
语法
举例
13 Union all
结果列通过它们的索引进行匹配(在内部的顺序 ).如果列名称不匹配,则从第一个查询中获取最终结果的名称
对联合执行类型转换。例如,如果合并的两个查询具有相同的字段与非- 和 从兼容类型的类型,由此产生的 有一个 类型字段
14 WITH子句