跳到主要内容
版本:3.2

异步物化视图能力边界

自 v2.4 起,StarRocks 支持异步物化视图。异步物化视图旨在加速在 StarRocks 内部或数据湖中基于多个大表执行复杂查询,通常涉及多表之间数十亿行数据的关联和聚合。查询的频率越高或查询语句越复杂,性能增益就会越很明显。此外,您还可以通过异步物化视图对数据仓库进行建模。

本文介绍了异步物化视图的能力边界及相关功能的支持版本。

DDL 特性

特性描述支持版本
自动分析物化视图创建后自动收集统计信息,以避免改写失败。v3.0+
随机分桶默认为物化视图启用随机分桶策略。v3.1+
延迟刷新支持在创建物化视图时使用 DEFERRED 或 IMMEDIATE 指定是否立即刷新。v3.0+
排序键支持使用 ORDER BY 指定物化视图的排序键。v3.1+
Window/CTE/Union/子查询支持在物化视图中使用窗口函数、CTE、Union 和子查询。v2.5+
激活无效物化视图在基表 Schema Change 后,通过在 ALTER MATERIALIZED VIEW 中使用 ACTIVE 关键字激活失效的物化视图。v2.5.7+
v3.0.1+
v3.1+
同步执行刷新支持在 REFRESH MATERIALIZED VIEW 中使用 WITH SYNC MODE 关键字同步执行物化视图刷新任务。v2.5.8+
v3.0.4+
v3.1+
中间结果落盘支持通过 enable_spill 属性启用中间结果落盘,避免在物化视图构建期间出现 OOM。v3.1+
资源组支持通过 resource_group 属性指定物化视图构建的资源组,以实现资源隔离。v3.1+
基于视图创建物化视图支持基于逻辑视图创建物化视图。v3.1+
替换物化视图支持在 ALTER MATERIALIZED VIEW 中使用 SWAP WITH 关键字原子替换物化视图。v3.1+
在物化视图上创建索引支持在物化视图上创建索引加速点查询。v3.0.7+
v3.1.4+
v3.2+
自动激活支持在后台会自动激活失效的物化视图,后台刷新间隔默认是 30 秒,尝试频率会指数递减,直至间隔大于 60min 后停止尝试。v3.1.4+
v3.2+
备份与恢复支持物化视图的备份与恢复。v3.2+
对象依赖关系提供系统定义的视图 sys.object_dependencies,用以查询物化视图与基表之间的依赖关系。v3.2+

变量

变量描述默认值支持版本
enable_materialized_view_rewrite是否启用物化视图查询改写。truev2.5+
enable_materialized_view_for_insert是否为 INSERT 语句启用物化视图查询改写。falsev2.5.18+
v3.0.9+
v3.1.7+
v3.2.2+
materialized_view_rewrite_mode物化视图查询改写模式。DEFAULTv3.2+
optimizer_materialized_view_timelimit物化视图查询改写的最大时间限制,超过此时间后将放弃改写并继续优化器进程。1000v3.1.9+
v3.2.5+
analyze_mv在物化视图刷新后收集统计信息的方法。SAMPLEv3.0+
enable_materialized_view_plan_cache是否启用物化视图的 Plan Cache。默认情况下,缓存 1000 个物化视图 Plan。truev2.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计划阶段候选物化视图的最大数量。64v3.1.9+
v3.2.5+

属性

属性描述支持版本
session.<property_name>用于物化视图构建的会话变量前缀,例如 session.query_timeoutsession.query_mem_limitv3.0+
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_numberv3.1.4+
v3.2+
force_external_table_query_rewrite是否为基于 External Catalog 的物化视图启用查询改写。v2.5+
query_rewrite_consistency基于内表构建的物化视图的查询改写规则。v3.0.5+
v3.1+
resource_group物化视图刷新任务所属的资源组。v3.1+
colocate_with物化视图的 Colocation Group。v3.1+
foreign_key_constraints创建 View Delta Join 查询改写的异步物化视图时的外键约束。v2.5.4+
v3.0+
unique_constraints创建 View Delta Join 查询改写的异步物化视图时的 Unique Key 约束。v2.5.4+
v3.0+
mv_rewrite_staleness_second查询改写时,物化视图数据的 Stalness 容忍度。v3.1+
enable_query_rewrite物化视图是否可用于查询改写。v3.3+

分区

对齐方式用例支持版本
等比例对齐分区 (日期类型)使用相同的分区键创建物化视图,使其分区与基表的分区一一对应。分区键必须为 DATE 或 DATETIME 类型。v2.5+
等比例对齐分区 (STRING 类型)使用相同的分区键创建物化视图,使其分区与基表的分区一一对应。分区键必须为 STRING 类型。v3.1.4+
v3.2+
时间粒度上卷对齐分区 (日期类型)通过在分区键上使用 date_trunc 函数,创建一个分区粒度大于基表的物化视图。分区键必须为 DATE 或 DATETIME 类型。v2.5+
时间粒度上卷对齐分区 (STRING 类型)通过在分区键上使用 date_trunc 函数,创建一个分区粒度大于基表的物化视图。分区键必须为 STRING 类型。v3.1.4+
v3.2+
自定义时间粒度对齐分区使用 date_trunc 函数与 time_slicedate_slice 函数自定义时间粒度来创建物化视图分区。v3.2+
多基表对齐分区如果多张基表的分区可以互相对齐,即基表使用相同类型的分区键,可以基于多张基表创建分区物化视图。v3.3+

不同 Join 方式

  • 单事实表(v2.4+):通过在物化视图和事实表之间建立分区映射,确保在事实表更新时自动刷新物化视图分区。
  • 多事实表(v3.3+):多事实表在相同的时间粒度上 Join/Union,通过在物化视图和多个事实表之间建立分区映射,确保在任一事实表更新时自动刷新物化视图分区。
  • 时序维度表(v3.3+):假设维度表存储历史版本数据,并基于一定时间粒度上分区。事实表在相同时间粒度上与维度表 Join。通过在物化视图和事实表以及维度表之间建立分区映射,确保在任一表更新时自动刷新物化视图分区。

基于 External Catalog 的物化视图

外部数据源支持场景和版本稳定版本
Hive
  • 非分区表:v2.5.4 & v3.0+
  • DATE 和 DATETIME 类型分区:v2.5.4 & v3.0+
  • STRING 类型分区键转化为 DATE 类型:v3.1.4 & v3.2+
  • 基于 Hive 视图的物化视图:待支持
  • 多级分区:待支持
v2.5.13+
v3.0.6+
v3.1.5+
v3.2+
Iceberg
  • 非分区表:v3.0+
  • DATE 和 DATETIME 类型分区:v3.1.4 & v3.2+
  • STRING 类型分区键转化为 DATE 类型:v3.1.4 & v3.2+
  • 基于 Iceberg 视图的物化视图:待支持
  • Partition Transform:v3.2.3
  • 分区级刷新:v3.1.7 & v3.2.3
  • 多级分区:待支持
v3.1.5+
v3.2+
Hudi
  • 非分区表:v3.2+
  • DATE 和 DATETIME 类型分区:v3.2+
  • 多级分区:待支持
不稳定
Paimon
  • 非分区表:v2.5.4 & v3.0+
  • DATE 和 DATETIME 类型分区:待支持
  • 多级分区:待支持
不稳定
DeltaLake
  • 非分区表:v3.2+
  • 分区表:待支持
  • 多级分区:待支持
不稳定
JDBC
  • 非分区表:v3.0+
  • 分区表:MySQL RangeColumn Partition v3.1.4
不稳定

查询改写

特性描述支持版本
单表改写基于单个内表构建的物化视图的查询改写。v2.5+
Inner Join 改写内表 INNER/CROSS JOIN 的查询改写。v2.5+
聚合改写基本聚合类型 Join 的查询改写。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 改写查询 Join 的表是物化视图 Join 的表的子集的改写。v2.5.4+
v3.0+
Join 派生改写在不同 Join 类型之间进行的查询改写。v2.5.8+
v3.0.4+
v3.1+
Full Outer Join 等改写支持支持 Full Outer Join、Semi Join、Anti Join 等其他 Join 的查询改写。v3.1+
Avg 改写至 Sum/Count将 avg() 的查询为 sum() / count()。v3.1+
基于视图的物化视图查询改写基于视图构建的物化视图的查询改写,无需将针对视图的查询转化为针对视图基表的查询。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+
Query Dump如果查询了物化视图,则会 Dump 该物化视图的相关信息。v3.1+
刷新审计日志当物化视图刷新时,将执行的 SQL 记录在审计日志中。v2.5.8+
v3.0.3+
v3.1+
命中审计日志当查询改写至物化视图时,在审计日志中记录命中的物化视图和候选物化视图。v3.1.4+
v3.2+
监控指标物化视图专用监控指标。v3.1.4+
v3.2+