3.Projection

  • clickhouse
  • Projection

什么是Projection

投影Projection,Clickhouse通过投影语句,聚合数据

当查询时,聚合条件或排序条件与投影语句相同时,就会命中查询已经聚合好的数据,减少了现查现算的步骤,能够明显加快查询速度

创建projection

-- 修改现有的表
ALTER TABLE 库名.表名
ADD PROJECTION 名字(
    投影sql...
);

-- 创建表时 projection
create TABLE 库名.表名(
    ---...声明表的字段,
    PROJECTION 名字(
        投影sql...
    );
)

物化历史数据

alter TABLE 库名.表名 MATERIALIZE PROJECTION 名字;

删除projection

ALTER TABLE 库名.表名 DROP PROJECTION 名字;

清空projection的数据

ALTER TABLE 库名.表名 CLEAR PROJECTION 名字 [IN PARTITION 分区名];

开启Projection

set allow_experimental_projection_optimization=1;

判断是否命中Projection

-- 强制走projection,如果没有合适的projection,会抛异常
settings force_optimize_projection=1;

用途

使用Projection加速聚合查询

ALTER TABLE 库名.表名
ADD PROJECTION 名字(
    select ...
    group by ...
);
-- 物化历史数据
alter TABLE 库名.表名 MATERIALIZE PROJECTION 名字;

将Projection当做二级索引使用

-- 使用重排序后的原始数据创建Projection
ALTER TABLE 库名.表名
ADD PROJECTION 名字
(
    SELECT ...
    ORDER BY ...
);
-- 物化历史数据
alter TABLE 库名.表名 MATERIALIZE PROJECTION 名字;
Loading...