
物化视图 | 单表聚合 | 多表关联 | 查询改写 | 刷新策略 | 基表 |
|---|---|---|---|---|---|
异步物化视图 | 是 | 是 | 是 | 异步刷新手动刷新 | 支持多表构建。基表可以来自:Default CatalogExternal Catalog已有异步物化视图已有视图 |
同步物化视图(Rollup) | 仅部分聚合函数 | 否 | 是 | 导入同步刷新 | 仅支持基于 Default Catalog 的单表构建 |
分区物化:您需要在物化视图的分区键中指定特定基表(通常是事实表)的分区键来实现物化视图的分区关联(PARTITION BY fact_tbl.col)。一个物化视图仅能与一个基表做分区关联。
物化创建:在异步物化视图的基础上,支持创建同步物化视图,不支持创建同步物化视图

特性 | 描述 | 支持版本 |
|---|---|---|
单表改写 | 基于单个内表构建的物化视图的查询改写。 | 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+ |
#检查工作状态
SHOW MATERIALIZED VIEWS FROM test_db WHERE NAME LIKE 'mv_pred_2' \G;
SHOW MATERIALIZED VIEWS FROM test_db;
USE testdb; SHOW MATERIALIZED VIEWS;
SELECT * FROM information_schema.materialized_views;
#查看刷新历史
SELECT * FROM information_schema.task_runs WHERE task_name ='mv-112517' ORDER BY CREATE_TIME DESC limit 1;
#刷新任务执行期间监控资源消耗
SHOW PROC '/current_queries';
#验证查询是否被改写 EXPLAIN
EXPLAIN [ LOGICAL | VERBOSE | COSTS ] <query>;
#验证查询是否被改写 TRACE
TRACE REWRITE <query>; 诊断
TRACE LOGS MV <query>;
TRACE REASON MV <query>;
#查询改写开关
-- 禁用改写
SET GLOBAL enable_materialized_view_rewrite = false;
-- 禁用一个物化 物化视图不可用/可用
ALTER MATERIALIZED VIEW mv1 ACTIVE;
ALTER MATERIALIZED VIEW mv1 INACTIVE;
#物化优化
-- 物化视图成功优化 StarRocks支持将物化视图刷新任务的部分中间结果落盘
ALTER MATERIALIZED VIEW mv2 SET ('session.enable_spill' = 'true');
-- 3.2 版本物化视图刷新任务的默认超时时间为5分钟,v3.2版本之后默认为1小时。
ALTER MATERIALIZED VIEW mv2 SET ( 'session.query_timeout' = '4000' );
#RENAME
ALTER MATERIALIZED VIEW test_db.order_mv RENAME order_total;
#异步刷新调整
ALTER MATERIALIZED VIEW test_db.order_mv REFRESH ASYNC EVERY(INTERVAL 2 DAY);
ALTER MATERIALIZED VIEW test_db.order_mv REFRESH ASYNC START('2025-09-01 08:00:00') EVERY (interval 1 day)
#刷新任务
-- 异步调用刷新任务。
REFRESH MATERIALIZED VIEW test_db.order_mv;
-- 同步调用刷新任务。
REFRESH MATERIALIZED VIEW test_db.order_mv WITH SYNC MODE;
-- 取消刷新任务。
CANCEL REFRESH MATERIALIZED VIEW test_db.order_mv;
-- 强制取消刷新任务。
CANCEL REFRESH MATERIALIZED VIEW test_db.order_mv FORCE;
#删除物化
DROP MATERIALIZED VIEW test_db.order_mv;explain
参数 | 说明 |
|---|---|
LOGICAL | 显示简要的逻辑执行计划。 |
VERBOSE | 显示详细的逻辑执行计划,包括数据类型,nullable信息,优化策略等。 |
COSTS | 显示详细的逻辑执行计划,包括统计信息。 |
query | 需要查看执行计划的查询语句。 |
特性 | 使用场景 | 支持版本 |
|---|---|---|
TRACE REWRITE | 使用 TRACE REWRITE 语句诊断改写问题。 | v2.5.10+ v3.0.5+ v3.1+ |
-- 修改基表。
ALTER TABLE <db_name>.<table_name> ADD COLUMN <column_desc>;
-- 原子替换基表。
ALTER TABLE <db_name>.<table1> SWAP WITH <table2>;
-- 修改视图定义。
ALTER VIEW <db_name>.<view_name> AS <query>;
-- 原子替换物化视图(替换两个物化视图的名字,并不修改其中数据)。
ALTER MATERIALIZED VIEW <db_name>.<mv1> SWAP WITH <mv2>;
-- 重新启用物化视图。
ALTER MATERIALIZED VIEW <db_name>.<mv_name> ACTIVE;Schema Change遵循以下原则:
由于Inactive状态的物化视图其数据一致性无法保证,您可以使用以下方法修复:
ALTER MATERIALIZED VIEW <mv_name> ACTIVE手动修复Inactive状态的物化视图。此语句将根据物化视图原始SQL定义尝试重建。需要注意的是,重建时需保证在底层Schema Change之后,SQL定义仍然有效,否则操作将失败。ADMIN SET FRONTEND CONFIG('enable_mv_automatic_active_check'='false')关闭此功能。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。