You need to enable JavaScript to run this app.
导航
物化视图
最近更新时间:2024.09.20 18:02:26首次发布时间:2024.09.18 17:43:12

物化视图是一种将查询结果数据存储下来的技术手段。它通过以空间换时间的方式,避免在查询时对数据进行再次的计算与聚合,从而加速查询并简化查询逻辑。
ByteHouse 的物化视图支持透明查询重写(query rewrite)机制,无需修改原有的查询语句,引擎可自动选择合适的物化视图进行查询重写。目前,ByteHouse 中的物化视图为在线物化视图,暂不具备手动刷新功能,源表数据能够实时同步到目标表。
本文将讲解创建物化视图的基本语法,详细使用方法请参考物化视图最佳实践

使用限制

目前,物化视图的使用有如下限制:

  1. 目标表引擎 暂不支持 HaUniqueMergeTree。暂时仅支持 HaMergeTree、HaAggregatingMergeTree 和 HaSummingMergeTree 引擎。
  2. 用于生成物化视图的查询 SQL 暂时不支持多表查询

创建物化视图

基本语法

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster_name]
    [TO [db.]name]
    [ENGINE = engine]
    [ORDER BY order_by_key]
    [PARTITION BY partition_key]
    [TTL ttl_expr]
    [POPULATE] AS SELECT ...

参数解释

  • TO [db.]name:目标表名,建议目标表是一张本地表,如不填写,会自动生成一张表,名称也会自动生成(如.inner_id.24c211a5-fec3-45a3-afed-e3d3cf46a1ea)。
  • ENGINE = engine:目标表引擎,在不填写目标表名的情况下需要填写。目前仅支持 HaMergeTree、HaAggregatingMergeTree 和 HaSummingMergeTree 引擎,暂不支持 HaUniqueMergeTree。
  • [ORDER BY order_by_key][PARTITION BY partition_key][TTL ttl_expr]:在不填写目标表名的情况下需要填写,填写要求同单独建本地表时的order_by_keypartition_keyttl
  • [POPULATE]:在创建物化视图时,可以在 AS SELECT 之前加上 POPULATE 关键字,这样可以使得源表里已存在的数据写入到物化视图中。但是一般推荐不设置这个字段:一方面源表的数据量可能非常多,设置POPULATE并全量写入视图中,存在超时或者失败的可能;另一方面,视图创建的过程中,POPULATE 不能让正在写入源表的数据被插入到视图中去。
  • AS SELECT:用于生成物化视图的查询 SQL,暂时不支持多表查询。