ClickHouse笔记

执行计划

explain syntax 执行计划-返回优化后的语法

分析语法

group by 后面可以跟with xxx 进行分析,比如上卷,多维分析,聚合

ClickHouse 自带的优化器

谓词下推:

就是将能提前筛选的条件,提前执行筛选,让匹配的结果集尽量小。

比如having后的条件可以挪到where中执行,where的条件可以挪到子查询中的where中执行等等。

聚合计算外推:

聚合函数中的计算语句会优化到聚合函数外面执行,比如sum(price * 3) 会优化成 sum(price) * 3

聚合函数消除:

group by 的字段,如果使用了max min等函数,会被优化器自动消除,因为没有意义。

手动合并分区

optimize table t_table final

ClickHouse SQL注意事项

1、distinct 底层用的 uniqExact

2、用IN代替join

3、如果两张表都很大,用inner join 代替 left right

4、两张分布式表,in join前要加globa关键词,这样右表只会在接受SQL的节点查询一次,然后将结果分发到其他节点上。如果不加,会在每个节点都发起一次对右表的关联查询,而右表又是分布式的,会导致查询右表被查询N的平方次N是分片数量,导致查询放大。

同步库数据,支持想MySql一样的 Select inster语法

insert into 库1.表1 select * FROM 库2.表2 limit 1000;
insert into so_test.t_table_name_all select * FROM default.t_table_all limit 1000;

删除-表 - 操作集群下所有表

DROP table db_name.table_name ON CLUSTER sys_ck_cluster;
DROP table db_name.table_name ON CLUSTER sys_ck_cluster;

删除-分区

ALTER TABLE db_name.table_name DROP PARTITION '20220101'

删除-条件

ALTER TABLE db_name.table_name DELETE WHERE flow_year = '';

更新-条件

ALTER TABLE db_name.table_name UPDATE update_time= now(), name='zhangsan' WHERE id='100'

操作所有集群

ON CLUSTER sys_ck_cluster // sys_ck_cluster 是集群的名字

在所有集群内创建表

CREATE TABLE so_test.test_table_name ON CLUSTER sys_ck_cluster
(
    `id` Int64 COMMENT '系统自动生成id标识',
    ......................................
)
ENGINE = ReplacingMergeTree(sign)
PARTITION BY toYYYYMM(create_date)
PRIMARY KEY create_date
ORDER BY (create_date)
SETTINGS index_granularity = 8192

在所有集群内创建视图

CREATE TABLE so_test.test_table_name_all ON CLUSTER sys_ck_cluster
(
    `id` Int64 COMMENT '系统自动生成id标识',
    .....................................
)
ENGINE = Distributed('sys_ck_cluster',
 'so_test',
 'test_table_name',
 sipHash64(flow_id))
posted @ 2021-12-15 10:56  InkYi  阅读(186)  评论(0编辑  收藏  举报