更新时间:2024-12-11 GMT+08:00
ClickHouse Projection设计

Projection仅在MRS 3.2.0及以上的版本集群中支持。
projection定义
CREATE TABLE test_projection_table(
level String,
type String,
name String,
city String,
time DateTime64,
PROJECTION projection_1(
SELECT level,
count()
GROUP BY level
),
PROJECTION projection_2(
SELECT type,
count()
GROUP BY type
)
) ENGINE = MergeTree()
ORDER BY (name, level, type)
通过表属性修改方式创建projection
在创建好projection后还可以对projection进行修改,具体语句如下:
ALTER TABLE test_projection_table
ADD PROJECTION projection_3(
SELECT type,
level
GROUP BY type,
level
)
Projection的使用
- 如下SQL查询的时候会走表达式:
SELECT type, count() FROM test_projection_table WHERE type = 'A' GROUP BY type;
- 而如下SQL不会走projection,因为city不在projection的定义中。
SELECT city, count() FROM test_projection_table WHERE type = 'A' GROUP BY city;
- 具体可以通过explain查看执行计划,如果出现ReadFromStorage (MergeTree(with projection)) ,表示命中projection。
命中projection使用规则
- Where条件必须是Projection定义中Group By的子集。
- Group By必须是Projection定义中Group By的子集。
- Select必须是Projection定义中Select的子集。
- 多表join场景不支持Projection特性,此种场景建议用普通物化视图实现。
父主题: ClickHouse物化视图设计