首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >StarRocks 物化视图1 - 基础概念

StarRocks 物化视图1 - 基础概念

原创
作者头像
jasong
发布2025-09-15 18:34:29
发布2025-09-15 18:34:29
3840
举报
文章被收录于专栏:LakeHouseLakeHouseImpalaClickHouse

一 物化基础知识

1 同步物化 VS 异步物化

物化视图

单表聚合

多表关联

查询改写

刷新策略

基表

异步物化视图

异步刷新手动刷新

支持多表构建。基表可以来自:Default CatalogExternal Catalog已有异步物化视图已有视图

同步物化视图(Rollup)

仅部分聚合函数

导入同步刷新

仅支持基于 Default Catalog 的单表构建

分区物化:您需要在物化视图的分区键中指定特定基表(通常是事实表)的分区键来实现物化视图的分区关联(PARTITION BY fact_tbl.col)。一个物化视图仅能与一个基表做分区关联。

物化创建:在异步物化视图的基础上,支持创建同步物化视图,不支持创建同步物化视图

2 查询改写

SR 物化能力
SR 物化能力

3 查询改写能力

特性

描述

支持版本

单表改写

基于单个内表构建的物化视图的查询改写。

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+

4 物化操作

代码语言:javascript
复制
#检查工作状态
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+

5 Schema Change

代码语言:javascript
复制
-- 修改基表。
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状态。对于Schema Change操作,仅当物化视图依赖的基表列发生Schema Change时,才会导致物化视图变为Inactive状态。
  • 视图的定义变更将导致依赖其的物化视图变为Inactive状态。
  • 物化视图的原子替换操作将导致依赖其的嵌套物化视图变为Inactive状态。
  • Inactive状态会级联向上传播,直到没有物化视图依赖关系为止。
  • Inactive状态的物化视图无法刷新或用于自动查询改写。
  • Inactive状态的物化视图仍然可以直接查询,但在它们被变为Active之前,数据一致性不能得到保证。

由于Inactive状态的物化视图其数据一致性无法保证,您可以使用以下方法修复:

  • 手动修复:您可以通过执行ALTER MATERIALIZED VIEW <mv_name> ACTIVE手动修复Inactive状态的物化视图。此语句将根据物化视图原始SQL定义尝试重建。需要注意的是,重建时需保证在底层Schema Change之后,SQL定义仍然有效,否则操作将失败。
  • 刷新时修复:StarRocks将会在刷新物化视图时尝试自动执行以上的修复命令,重建物化视图再刷新。
  • 自动修复:StarRocks将会尝试自动修复Inactive的物化视图,您可以通过ADMIN SET FRONTEND CONFIG('enable_mv_automatic_active_check'='false')关闭此功能。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 物化基础知识
    • 1 同步物化 VS 异步物化
    • 2 查询改写
    • 3 查询改写能力
    • 4 物化操作
    • 5 Schema Change
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档