自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+ |
中间结果落盘 | 支持通过 | v3.1+ |
资源组 | 支持通过 | 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+ |
对象依赖关系 | 提供系统定义的视图 | 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 | 是否启用物化视图的Plan Cache。默认情况下,缓存1000个物化视图Plan。 | 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> | 用于物化视图构建的会话变量前缀,例如 | v3.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)。推荐使用此属性而非 | v3.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类型。 | v3.1.4+ v3.2+ | |
通过在分区键上使用 | v2.5+ | |
通过在分区键上使用 | v3.1.4+ v3.2+ | |
使用 | v3.2+ | |
如果多张基表的分区可以互相对齐,即基表使用相同类型的分区键,可以基于多张基表创建分区物化视图。 | v3.3+ |
Join方式如下:
单事实表(v2.4+):通过在物化视图和事实表之间建立分区映射,确保在事实表更新时自动刷新物化视图分区。
多事实表(v3.3+):多事实表在相同的时间粒度上Join/Union,通过在物化视图和多个事实表之间建立分区映射,确保在任一事实表更新时自动刷新物化视图分区。
时序维度表(v3.3+):假设维度表存储历史版本数据,并基于一定时间粒度上分区。事实表在相同时间粒度上与维度表Join。通过在物化视图和事实表以及维度表之间建立分区映射,确保在任一表更新时自动刷新物化视图分区。
基于External Catalog的物化视图
外部数据源 | 支持场景和版本 | 稳定版本 |
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+ |
聚合改写 | 基本聚合类型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 | 将 | v3.1+ |
基于视图的物化视图查询改写 | 基于视图构建的物化视图的查询改写,无需将针对视图的查询转化为针对视图基表的查询。 | v3.2.2+ |
COUNT DISTINCT改写至ArrayAgg | 将COUNT 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+ |