文章目录
ClickHouse数据查询
前言
在ClickHouse数据导入 一文中介绍了导入数据到ClickHouse数据表中,本文描述如何对ClickHouse中的数据进行查询。
查询语法
参见:
[WITH expr_list|(subquery)]
SELECT [DISTINCT] expr_list
[FROM [db.]table | (subquery) | table_function] [FINAL]
[SAMPLE sample_coeff]
[ARRAY JOIN ...]
[GLOBAL] [ANY|ALL|ASOF] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER|SEMI|ANTI] JOIN (subquery)|table (ON <expr_list>)|(USING <column_list>)
[PREWHERE expr]
[WHERE expr]
[GROUP BY expr_list] [WITH TOTALS]
[HAVING expr]
[ORDER BY expr_list] [WITH FILL] [FROM expr] [TO expr] [STEP expr]
[LIMIT [offset_value, ]n BY columns]
[LIMIT [n, ]m] [WITH TIES]
[UNION ALL ...]
[INTO OUTFILE filename]
[FORMAT format]
可以看到ClickHouse的SELECT语句的语法和通用的SQL的SELECT语句非常类似,包括:
-
SELECT
: 指定返回结果字段 -
DISTINCT
:去重 -
FROM
: 指定要查询的表或子查询 -
JOIN
:表连接,支持内连接和外连接、左连接和右连接 -
WHERE
:筛选条件 -
GROUP BY
:分组,和聚合函数一起使用 -
HAVING
:分组后筛选 -
ORDER BY
:排序 -
LIMIT
:限制返回记录数 -
UNION ALL
:并集;ClickHouse目前只支持UNION ALL
,还不支持UNION
ClickHouse的SELECT语句中也有一些特殊的用法:
WITH
: 设置查询中要用到的变量SAMPLE
: 数据取样,类似Pandas库的sample()函数PREWHERE
: 预筛选,起到提升性能作用ARRAY JOIN
:数组连接,用来展开数组或嵌套字段,一行变多行LIMIT BY
: 分组,再从每组中取前n条记录INTO OUTFILE
: 到处表数据到文件,再用FORMAT
指定文件格式
查询子句
下面只说明ClickHouse中特有的数据查询子句。
WITH子句
参见:
-- 在WITH子句中定义一个变量并赋值,然后在SELECT子句中通过别名使用该变量
with '2014-03-17' as dt \
select count(1) from hits_v1 where EventDate = dt;
-- 在WITH子句中定义一个函数,然后在SELECT子句中通过别名使用该函数
with round(Duration / 60)as duration_minutes \
select StartDate, max(duration_minutes