功能支持:异步物化视图
StarRocks v2.4 及更高版本支持异步物化视图。异步物化视图旨在加速对 StarRocks 或数据湖中大型表进行连接或聚合的复杂查询。当查询频繁运行或足够复杂时,性能差异可能非常显着。此外,异步物化视图对于在数据仓库上构建数学模型特别有用。
本文档概述了异步物化视图的能力范围以及所涉及功能的受支持版本。
DDL 功能
特性 | 描述 | 支持版本 |
---|---|---|
自动分析 | 在创建物化视图后自动收集统计信息,以避免重写失败。 | v3.0+ |
Random 分桶 | 默认情况下,为物化视图启用随机分桶策略。 | v3.1+ |
延迟刷新 | 支持通过在 CREATE MATERIALIZED VIEW 中使用 DEFERRED 或 IMMEDIATE 来指定是否在创建后立即刷新物化视图。 | v3.0+ |
Order By | 支持使用 ORDER BY 为物化视图指定排序键。 | v3.1+ |
Window/CTE/Union/Subquery | 支持在物化视图中使用窗口函数、CTEs、Unions 和子查询。 | v2.5+ |
ALTER ACTIVE | 在使用 ALTER MATERIALIZED VIEW 中的 ACTIVE 关键字在基表中进行 Schema 更改后,激活无效的物化视图。 | v2.5.7+ v3.0.1+ v3.1+ |
REFRESH SYNC MODE | 支持通过在 REFRESH MATERIALIZED VIEW 中使用 WITH SYNC MODE 关键字,为物化视图刷新任务同步执行。 | v2.5.8+ v3.0.4+ v3.1+ |
中间结果溢写 | 支持使用 enable_spill 属性启用中间结果溢写,以避免在物化视图构造期间发生 OOM。 | v3.1+ |
资源组 | 支持使用 resource_group 属性为物化视图构造指定资源组,以实现资源隔离。 | v3.1+ |
基于 View 的物化视图 | 支持基于逻辑视图创建物化视图。 | v3.1+ |
交换物化视图 | 支持使用 ALTER MATERIALIZED VIEW 中的 SWAP WITH 关键字原子地替换物化视图。 | v3.1+ |
CREATE INDEX ON 物化视图 | 支持在物化视图上创建索引以加速点查询。 | v3.0.7+ v3.1.4+ v3.2+ |
AUTO ACTIVE | 在后台使用指数退避自动激活无效的物化视图,在间隔达到 60 分钟后停止。 | v3.1.4+ v3.2+ |
备份和还原 | 支持物化视图的备份和还原。 | v3.2+ |
对象依赖关系 | 提供系统定义的视图 sys.object_dependencies 以阐明物化视图和基表之间的依赖关系。 | v3.2+ |
变量
变量 | 描述 | 默认 | 支持版本 |
---|---|---|---|
enable_materialized_view_rewrite | 是否启用物化视图查询重写。 | true | v2.5+ |
enable_materialized_view_for_insert | 是否为 INSERT 语句启用物化视图查询重写。 | false | v2.5.18+ v3.0.9+ v3.1.7+ v3.2.2+ |
materialized_view_rewrite_mode | 物化视图查询重写的模式。 | DEFAULT | v3.2+ |
optimizer_materialized_view_timelimit | 物化视图查询重写可以使用的最长时间,之后将放弃查询重写并继续执行优化器进程。 | 1000 | v3.1.9+ v3.2.5+ |
analyze_mv | 刷新物化视图后收集统计信息的方法。 | SAMPLE | v3.0+ |
enable_materialized_view_plan_cache | 是否为物化视图启用计划缓存。默认情况下,缓存 1000 个物化视图计划。 | TRUE | v2.5.13+ v3.0.7+ v3.1.4+ v3.2.0+ v3.3.0+ |
query_including_mv_names | 可用于查询重写的物化视图的白名单。 | v3.1.11+ v3.2.5+ | |
query_excluding_mv_names | 可用于查询重写的物化视图的黑名单。 | v3.1.11+ v3.2.5+ | |
cbo_materialized_view_rewrite_related_mvs_limit | 计划阶段中候选物化视图的最大数量。 | 64 | v3.1.9+ v3.2.5+ |
属性
属性 | 描述 | 支持版本 |
---|---|---|
session.<property_name> | 用于物化视图构造的会话变量的前缀,例如,session.insert_timeout 和 session.query_mem_limit 。 | v3.4+ |
auto_refresh_partitions_limit | 每次触发自动刷新时要刷新的物化视图分区的最大数量。 | v2.5+ |
excluded_trigger_tables | 其更新不会触发物化视图自动刷新的基表。 | v2.5+ |
partition_refresh_number | 在批处理中执行刷新任务时,每个批处理中要刷新的分区数。 | v2.5+ |
partition_ttl_number | 要保留的最近的物化视图分区的数量。 | v2.5+ |
partition_ttl | 物化视图分区的生存时间 (TTL)。建议使用此属性而不是 partition_ttl_number 。 | v3.1.4+ v3.2+ |
force_external_table_query_rewrite | 是否为基于外部目录的物化视图启用查询重写。 | v2.5+ |
query_rewrite_consistency | 在内部表上构建的物化视图的查询重写规则。 | v3.0.5+ v3.1+ |
resource_group | 物化视图的刷新任务所属的资源组。 | v3.1+ |
colocate_with | 物化视图的 Colocation 组。 | v3.1+ |
foreign_key_constraints | 在 View Delta Join 场景中,在创建用于查询重写的物化视图时,使用的外键约束。 | v2.5.4+ v3.0+ |
unique_constraints | 在 View Delta Join 场景中,在创建用于查询重写的物化视图时,使用的唯一键约束。 | v2.5.4+ v3.0+ |
mv_rewrite_staleness_second | 查询重写期间物化视图数据的陈旧容限。 | v3.1+ |
enable_query_rewrite | 物化视图是否可以用于查询重写。 | v3.3+ |
excluded_refresh_tables | 在物化视图刷新期间不触发数据同步的基表。 | v3.3+ |
分区
对齐 | 用例 | 支持版本 |
---|---|---|
一对一分区对齐(日期类型) | 创建物化视图,其分区通过使用相同的分区键与基表的分区一对一对应。分区键必须是 DATE 或 DATETIME 类型。 | v2.5+ |
一对一分区对齐(字符串类型) | 创建物化视图,其分区通过使用相同的分区键与基表的分区一对一对应。分区键必须是 STRING 类型。 | v3.1.4+ v3.2+ |
具有时间粒度汇总的分区对齐(日期类型) | 通过对分区键使用 date_trunc 函数,创建分区粒度大于基表的分区粒度的物化视图。分区键必须是 DATE 或 DATETIME 类型。 | v2.5+ |
具有时间粒度汇总的分区对齐(字符串类型) | 通过对分区键使用 date_trunc 函数,创建分区粒度大于基表的分区粒度的物化视图。分区键必须是 STRING 类型。 | v3.1.4+ v3.2+ |
以自定义时间粒度对齐分区 | 创建物化视图,并通过将 date_trunc 函数与 time_slice 或 date_slice 函数结合使用来自定义其分区的时间粒度。 | v3.2+ |
与多个基表对齐分区 | 创建物化视图,只要基表使用相同类型的分区键,其分区就与多个基表的分区对齐。 | v3.3+ |
不同的连接方法
- 单个事实表 (v2.4+):在物化视图和事实表之间建立分区映射可确保在事实表更新时自动刷新物化视图分区。
- 多个事实表 (v3.3+):在物化视图和以相同时间粒度连接/联合的多个事实表之间建立分区映射可确保在任何事实表更新时自动刷新物化视图分区。
- 时间维度表 (v3.3+):假设维度表存储历史版本数据并以特定时间粒度进行分区,并且事实表以相同时间粒度连接维度表。在物化视图与事实表和维度表之间建立分区映射可确保在任何表更新时自动刷新物化视图分区。
外部目录上的物化视图
外部数据源 | 支持的场景和版本 | 稳定版本 |
---|---|---|
Hive |
| v2.5.13+ v3.0.6+ v3.1.5+ v3.2+ |
Iceberg |
| v3.1.5+ v3.2+ |
Hudi |
| 不稳定 |
Paimon |
| 不稳定 |
DeltaLake |
| 不稳定 |
JDBC |
| 不稳定 |
查询重写
特性 | 描述 | 支持版本 |
---|---|---|
单表重写 | 使用在单个内部表上构建的物化视图进行查询重写。 | v2.5+ |
Inner Join 重写 | 内部表上的 INNER/CROSS JOIN 的查询重写。 | v2.5+ |
聚合重写 | 具有基本聚合的连接的查询重写。 | v2.5+ |
UNION 重写 | 内部表上的谓词 UNION 补偿重写和分区 UNION 补偿重写。 | v2.5+ |
嵌套物化视图重写 | 使用在内部表上嵌套的物化视图进行查询重写。 | v2.5+ |
Count Distinct 重写 (bitmap/hll) | 将 COUNT DISTINCT 计算重写为基于 bitmap 或 HLL 的计算的查询重写。 | v2.5.6+ v3.0+ |
View Delta Join 重写 | 重写连接表的查询,这些表是物化视图连接的表的子集。 | v2.5.4+ v3.0+ |
Join Derivability 重写 | 不同连接类型之间的查询重写。 | v2.5.8+ v3.0.4+ v3.1+ |
Full Outer Join 和其他 Join | Full Outer Join、Semi Join 和 Anti Join 的查询重写。 | v3.1+ |
Avg 到 Sum/Count 重写 | 将 avg() 重写为 sum() / count() 的查询重写 | v3.1+ |
基于 View 的重写 | 使用基于视图构建的物化视图进行查询重写,而无需将针对视图的查询转录为针对视图的基表的查询。 | v3.2.2+ |
Count Distinct 重写 (ArrayAgg) | 将 COUNT DISTINCT 计算重写为使用 array_agg_distinct 函数的计算的查询重写。 | v3.2.5+ v3.3+ |
基于文本的查询重写 | 重写具有与物化视图定义相同的抽象语法树的查询。 | v3.3+ |
诊断功能
特性 | 使用场景 | 支持版本 |
---|---|---|
TRACE REWRITE | 使用 TRACE REWRITE 语句诊断重写问题。 | v2.5.10+ v3.0.5+ v3.1+ |
查询 Dump | 在查询物化视图后,Dump 物化视图的信息。 | v3.1+ |
刷新审计日志 | 在刷新物化视图时,在审计日志中记录执行的 SQL。 | v2.5.8+ v3.0.3+ v3.1+ |
命中审计日志 | 当查询被重写为物化视图时,在审计日志中记录命中的物化视图和候选物化视图。 | v3.1.4+ v3.2+ |
监控指标 | 物化视图的专用监控指标。 | v3.1.4+ v3.2+ |