物化视图是一种将查询结果数据存储下来的技术手段。它通过以空间换时间的方式,避免在查询时对数据进行再次的计算与聚合,从而加速查询并简化查询逻辑。
ByteHouse 的物化视图支持透明查询重写(query rewrite)机制,无需修改原有的查询语句,引擎可自动选择合适的物化视图进行查询重写。目前,ByteHouse 中的物化视图为在线物化视图,暂不具备手动刷新功能,源表数据能够实时同步到目标表。
本文将讲解创建物化视图的基本语法,详细使用方法请参考物化视图最佳实践。
目前,物化视图的使用有如下限制:
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_key
、partition_key
与ttl
。[POPULATE]
:在创建物化视图时,可以在 AS SELECT 之前加上 POPULATE 关键字,这样可以使得源表里已存在的数据写入到物化视图中。但是一般推荐不设置这个字段:一方面源表的数据量可能非常多,设置POPULATE
并全量写入视图中,存在超时或者失败的可能;另一方面,视图创建的过程中,POPULATE 不能让正在写入源表的数据被插入到视图中去。AS SELECT
:用于生成物化视图的查询 SQL,暂时不支持多表查询。