云服务器内容精选

  • 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对比 表1 普通物化视图与projection对比表 物化视图类型 原表数据与物化视图一致性 灵活性 物化视图开发及维护复杂度 普通物化视图 数据从原表同步到物化视图需要时间窗 灵活性较高,有新的业务可开发新的物化视图; 可开发复杂逻辑SQL语句的物化视图。 复杂度较高,需要开发很多物化视图,每个物化视图都需要单独去管理和维护 projection 数据实时同步,数据写入即可查询到物化视图最新数据 创建表时指定的物化视图语法,新的SQL业务需要修改表结构 不需要开发很多物化视图,任意查询SQL会自动重写命中物化视图 Projection仅在MRS 3.2.0及以上的版本中支持。 父主题: 物化视图设计