创建分区物化视图
本文介绍了如何使用分区物化视图满足不同业务需求。
概述
StarRocks 的异步物化视图支持多种分区策略和函数,方便您实现以下效果:
-
增量构建
在创建分区物化视图时,您可以设置分区刷新任务分批执行,以避免所有分区并行刷新导致过多资源消耗。
-
增量刷新
您可以将刷新任务设置为基表分区有数据更新时,仅更新物化视图的相应分区。分区级别的刷新可以显著减少刷新整个物化视图所导致的资源浪费。
-
局部物化
您可以为物化视图分区设置 TTL,从而实现数据的部分物化。
-
透明查询改写
查询可以仅基于最新的物化视图分区进行透明改写。过期的分区不会参与查询计划,相应查询将在基表上直接执行,从而确保数据的一致性。
使用限制
分区物化视图只能在分区基表(通常是事实表)上创建。您需要通过映射基表和物化视图之间的分区关系建立两者之间的协同关系。
目前,StarRocks 支持在以下数据源中的表上构建分区物化视图:
- StarRocks Default Catalog 中的 OLAP 表
- 支持的分区策略:Range 分区
- 支持的分区键数据类型:INT、DATE、DATETIME 和 STRING
- 支持的表类型:主键表、明细表、聚合表和更新表
- 支持存算一体和存算分离集群
- Hive Catalog、Hudi Catalog、Iceberg Catalog 和 Paimon Catalog 中的表
- 支持的分区级别:一级分区
- 支持的分区键数据类型:INT、DATE、DATETIME 和 STRING
备注
- 不支持基于非分区基表创建分区物化视图。
- 对于 StarRocks OLAP 表:
- 目前不支持 List 分区和表达式分区。
- 基表的两个相邻分区必须具有连续的范围。
- 对于 External Catalog 中的多级分区基表,只能使用一级分区路径来创建分区物化视图。例如,对于以
yyyyMMdd/hour
格式分区的表,只能构建按yyyyMMdd
分区的物化视图。 - 从 v3.2.3 版本开始,StarRocks 支持在使用 Partition Transforms (分 区变换) 的 Iceberg 表上创建分区物化视图,物化视图将根据变换后的列进行分区。更多信息,参考 使用物化视图加速数据湖查询 - 选择合适的刷新策略。
使用场景
假设有以下基表:
CREATE TABLE IF NOT EXISTS par_tbl1 (
datekey DATE, -- DATE 类型的日期列用作分区键。
k1 STRING,
v1 INT,
v2 INT
)
ENGINE=olap
PARTITION BY RANGE (datekey) (
START ("2021-01-01") END ("2021-01-04") EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(k1);
CREATE TABLE IF NOT EXISTS par_tbl2 (
datekey STRING, -- STRING 类型的日期列用作分区键。
k1 STRING,
v1 INT,
v2 INT
)
ENGINE=olap
PARTITION BY RANGE (str2date(datekey, '%Y-%m-%d')) (
START ("2021-01-01") END ("2021-01-04") EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(k1);
CREATE TABLE IF NOT EXISTS par_tbl3 (
datekey_new DATE, -- 等同于 par_tbl1.datekey 列。
k1 STRING,
v1 INT,
v2 INT
)
ENGINE=olap
PARTITION BY RANGE (datekey_new) (
START ("2021-01-01") END ("2021-01-04") EVERY (INTERVAL 1 DAY)
)
DISTRIBUTED BY HASH(k1);