创建、查询与维护异步物化视图

数据仓库 PALO

  • 功能发布记录
  • 操作手册1
    • LDAP认证
    • 时区
    • 使用S3-SDK访问对象存储
    • 权限管理
    • 物化视图
    • 变量
    • 资源管理
    • 数据更新与删除
      • 标记删除
      • Sequence-Column
      • 数据更新
      • 数据删除
    • 备份与恢复
      • 备份与恢复
    • 数据导出1
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 数据导出概述
      • Export
    • 数据导出
      • 全量数据导出
      • 导出查询结果集
      • 导出总览
      • 导出数据到外部表
    • 查询加速1
      • 查询缓存
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
    • 数据导入
      • JSON格式数据导入说明
      • 导入本地数据
      • 导入BOS中的数据
      • 导入事务和原子性
      • 通过外部表同步数据
      • 使用JDBC同步数据
      • 列的映射、转换与过滤
      • 订阅Kafka日志
      • 严格模式
      • 导入总览
    • 数据更新与删除1
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 数据导入1
      • 高并发导入优化(Group Commit)
      • 导入概览
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 数据源
        • Kafka
        • S3 兼容存储
        • 从其他 TP 系统迁移数据
        • HDFS
        • 从其他 AP 系统迁移数据
        • Flink
        • 本地文件
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
  • 开发指南
    • 迁移ClickHouse数据
    • Doris集群间数据迁移
    • 数据更新与删除
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 查询加速
      • 查询缓存
      • Colocation Join
      • 高并发点查
      • Hint
        • Hint 概述
        • Leading Hint
        • Distribute Hint
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
      • 高效去重
        • BITMAP 精准去重
        • HLL 近似去重
      • 优化技术原理
        • TOPN 查询优化
        • 统计信息
        • Pipeline 执行引擎
        • 查询优化器介绍
        • Runtime Filter
      • 查询调优概述
        • 调优概述
        • 诊断工具
        • 分析工具
        • 调优流程
      • 查询优化实践
        • 常见调优参数
        • 计划调优
          • 使用 Hint 控制代价改写
          • 使用异步物化视图透明改写
          • 使用 Leading Hint 控制 Join 顺序
          • 优化表 Schema 设计
          • 使用分区裁剪优化扫表
          • 优化索引设计和使用
          • 使用 Hint 调整 Join Shuffle 方式
          • DML 计划调优
          • 使用 Colocate Group 优化 Join
          • 使用同步物化视图透明改写
          • 使用 SQL Cache 加速查询
        • 执行调优
          • 数据倾斜处理
          • RuntimeFilter 的等待时间调整
          • 并行度调优
    • 数据查询
      • 连接(JOIN)
      • 子查询
      • 复杂类型查询
      • 列转行 (Lateral View)
      • MySQL 兼容性
      • 聚合多维分析
      • 分析函数(窗口函数)
      • 公用表表达式(CTE)
      • 自定义函数
        • 别名函数
        • Java UDF, UDAF, UDTF
    • 数据导出
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 最佳实践
      • 数据导出概述
      • Export
    • 数据导入
      • 高并发导入优化(Group Commit)
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 导入最佳实践
      • 数据源
        • Kafka
        • Snowflake
        • S3 兼容存储
        • Google Cloud Storage
        • 从其他 TP 系统迁移数据
        • Azure Storage
        • 腾讯云 COS
        • MinIO
        • HDFS
        • 阿里云 OSS
        • 华为云 OBS
        • 从其他 AP 系统迁移数据
        • Flink
        • Redshift
        • Amazon S3
        • 本地文件
        • BigQuery
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
    • BI工具接入
      • Sugar
      • Navicat
      • Tableau
      • DBeaver
      • 永洪BI
      • FineBI(帆软)
    • 数据库连接
      • 通过 MySQL 协议连接
      • 基于 Arrow Flight SQL 的高速数据传输链路
    • 湖仓一体
      • 分析 S3或HDFS 上的文件
      • 湖仓一体概述
      • SQL 方言兼容
      • 弹性计算节点
      • 云服务认证接入
      • 元数据缓存
      • 外表统计信息
      • 数据缓存
      • 数据库分析
        • MySQL
        • JDBC Catalog
        • Oracle
        • OceanBase
        • SAP HANA
        • 阿里云 MaxCompute
        • ClickHouse
        • PostgreSQL
        • IBM Db2
        • SQL Server
        • Elasticsearch
      • 湖仓一体最佳实践
        • 使用 PALO 和 Paimon
        • 使用 PALO 和 Iceberg
        • 使用 PALO 和 Hudi
        • 使用 PALO 和 LakeSoul
      • 数据湖构建
        • Iceberg
        • Hive
      • 数据湖分析
        • Hudi Catalog
        • 阿里云 DLF
        • Iceberg Catalog
        • Paimon Catalog
        • Hive Catalog
    • 数据表设计
      • 行业混存
      • 数据压缩
      • Schema 变更
      • 数据类型
      • 自增列
      • 概览
      • 数据库建表最佳实践
      • 冷热数据分层
        • SSD 和 HDD 层级存储
        • 远程存储
        • 冷热数据分层概述
      • 表索引
        • 倒排索引
        • 前缀索引与排序键
        • N-Gram 索引
        • BloomFilter 索引
        • 索引概述
      • 数据划分
        • 数据分桶
        • 数据分布概念
        • 动态分区
        • 自动分区
        • 手动分区
        • 常见文档
      • 数据模型
        • 使用注意
        • 模型概述
        • 主键模型
        • 明细模型
        • 聚合模型
  • 版本发布历史
    • 百度数据仓库 Palo 2.0 版本全新发布
  • SQL手册
    • 字面常量
    • 别名
    • SQL-手册
    • 数据类型
    • SQL语句
    • 注释
    • 内置函数
    • 白名单管理
    • SQL操作符
    • 内置函数
      • 聚合函数
      • 位操作函数
      • 字符串函数
      • 条件函数
      • 数学函数
      • JSON解析函数
      • 类型转换函数
      • 格式转换函数
      • 通用函数
      • 时间和日期函数
      • BITMAP函数
      • 窗口函数
      • 哈希函数
      • HLL函数
    • 语法帮助
      • DML
        • INSERT
        • ROUTINE-LOAD
        • RESTORE
        • SELECT-INTO-OUTFILE
        • ALTER-ROUTINE-LOAD
        • BROKER-LOAD
        • BACKUP
        • EXPORT
        • STREAM-LOAD
      • DDL
        • CREATE-FILE
        • DROP-RESOURCE
        • CREATE-RESOURCE
        • CREATE-MATERIALIZED-VIEW
        • DROP-RESROUCE
        • CREATE-TABLE
        • DROP-REPOSITORY
        • CREATE-REPOSITORY
        • CREATE-ODBC-TABLE
      • 信息查看语句
        • SHOW-BACKUP
        • SHOW-ALTER-TABLE-MATERIALIZED-VIEW
        • SHOW-SNAPSHOT
        • SHOW-ROUTINE-LOAD
        • SHOW-CREATE-ROUTINE-LOAD
        • SHOW-ROLES
        • SHOW-GRANTS
        • SHOW-EXPORT
        • SHOW-ROUTINE-LOAD-TASK
        • SHOW-REPOSITORIES
        • SHOW-LOAD
        • SHOW-RESOURCES
        • SHOW-RESTORE
        • SHOW-PROPERTY
        • SHOW-FILE
      • 辅助命令
        • PAUSE-ROUTINE-LOAD
        • STOP-ROUTINE-LOAD
        • ALTER-ROUTINE-LOAD
        • CANCEL-LOAD
        • RESUME-ROUTINE-LOAD
      • 账户管理
        • SET-PROPERTY
        • REVOKE
        • GRANT
        • CREATE-ROLE
        • DROP-ROLE
        • CREATE-USER
        • DROP-USER
        • SET-PASSWORD
  • 快速入门
    • 快速上手
    • 存算分离
    • 存算一体
  • 典型实践
    • 如何开启Debug日志
    • 导入分析
    • 查询分析
  • 操作手册
    • 权限和子用户
    • 存算一体
      • 连接集群
      • 查询分析
      • 监控告警
        • 监控指标
        • 告警配置
      • 备份恢复
        • 通过管理页面备份与恢复
        • 备份与恢复
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 集群创建
        • 停止与删除
        • 重置管理员密码
        • 集群扩缩容
        • 集群详情
    • 存算分离
      • 连接集群
      • 计算组管理
        • 重启计算组
        • 创建计算组
      • 监控告警
        • 监控指标
        • 告警配置
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 停止与删除
        • 创建集群
        • 重置管理员密码
        • 集群详情
  • 服务等级协议SLA
    • 服务等级协议(SLA)v1.0
  • 产品概述
    • 系统架构
    • 产品特点
    • 产品介绍
  • 视频专区
    • 操作指南
    • 产品简介
  • 产品定价
    • 预付费
    • 计费说明
    • 后付费
所有文档
menu
没有找到结果,请重新输入

数据仓库 PALO

  • 功能发布记录
  • 操作手册1
    • LDAP认证
    • 时区
    • 使用S3-SDK访问对象存储
    • 权限管理
    • 物化视图
    • 变量
    • 资源管理
    • 数据更新与删除
      • 标记删除
      • Sequence-Column
      • 数据更新
      • 数据删除
    • 备份与恢复
      • 备份与恢复
    • 数据导出1
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 数据导出概述
      • Export
    • 数据导出
      • 全量数据导出
      • 导出查询结果集
      • 导出总览
      • 导出数据到外部表
    • 查询加速1
      • 查询缓存
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
    • 数据导入
      • JSON格式数据导入说明
      • 导入本地数据
      • 导入BOS中的数据
      • 导入事务和原子性
      • 通过外部表同步数据
      • 使用JDBC同步数据
      • 列的映射、转换与过滤
      • 订阅Kafka日志
      • 严格模式
      • 导入总览
    • 数据更新与删除1
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 数据导入1
      • 高并发导入优化(Group Commit)
      • 导入概览
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 数据源
        • Kafka
        • S3 兼容存储
        • 从其他 TP 系统迁移数据
        • HDFS
        • 从其他 AP 系统迁移数据
        • Flink
        • 本地文件
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
  • 开发指南
    • 迁移ClickHouse数据
    • Doris集群间数据迁移
    • 数据更新与删除
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 查询加速
      • 查询缓存
      • Colocation Join
      • 高并发点查
      • Hint
        • Hint 概述
        • Leading Hint
        • Distribute Hint
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
      • 高效去重
        • BITMAP 精准去重
        • HLL 近似去重
      • 优化技术原理
        • TOPN 查询优化
        • 统计信息
        • Pipeline 执行引擎
        • 查询优化器介绍
        • Runtime Filter
      • 查询调优概述
        • 调优概述
        • 诊断工具
        • 分析工具
        • 调优流程
      • 查询优化实践
        • 常见调优参数
        • 计划调优
          • 使用 Hint 控制代价改写
          • 使用异步物化视图透明改写
          • 使用 Leading Hint 控制 Join 顺序
          • 优化表 Schema 设计
          • 使用分区裁剪优化扫表
          • 优化索引设计和使用
          • 使用 Hint 调整 Join Shuffle 方式
          • DML 计划调优
          • 使用 Colocate Group 优化 Join
          • 使用同步物化视图透明改写
          • 使用 SQL Cache 加速查询
        • 执行调优
          • 数据倾斜处理
          • RuntimeFilter 的等待时间调整
          • 并行度调优
    • 数据查询
      • 连接(JOIN)
      • 子查询
      • 复杂类型查询
      • 列转行 (Lateral View)
      • MySQL 兼容性
      • 聚合多维分析
      • 分析函数(窗口函数)
      • 公用表表达式(CTE)
      • 自定义函数
        • 别名函数
        • Java UDF, UDAF, UDTF
    • 数据导出
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 最佳实践
      • 数据导出概述
      • Export
    • 数据导入
      • 高并发导入优化(Group Commit)
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 导入最佳实践
      • 数据源
        • Kafka
        • Snowflake
        • S3 兼容存储
        • Google Cloud Storage
        • 从其他 TP 系统迁移数据
        • Azure Storage
        • 腾讯云 COS
        • MinIO
        • HDFS
        • 阿里云 OSS
        • 华为云 OBS
        • 从其他 AP 系统迁移数据
        • Flink
        • Redshift
        • Amazon S3
        • 本地文件
        • BigQuery
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
    • BI工具接入
      • Sugar
      • Navicat
      • Tableau
      • DBeaver
      • 永洪BI
      • FineBI(帆软)
    • 数据库连接
      • 通过 MySQL 协议连接
      • 基于 Arrow Flight SQL 的高速数据传输链路
    • 湖仓一体
      • 分析 S3或HDFS 上的文件
      • 湖仓一体概述
      • SQL 方言兼容
      • 弹性计算节点
      • 云服务认证接入
      • 元数据缓存
      • 外表统计信息
      • 数据缓存
      • 数据库分析
        • MySQL
        • JDBC Catalog
        • Oracle
        • OceanBase
        • SAP HANA
        • 阿里云 MaxCompute
        • ClickHouse
        • PostgreSQL
        • IBM Db2
        • SQL Server
        • Elasticsearch
      • 湖仓一体最佳实践
        • 使用 PALO 和 Paimon
        • 使用 PALO 和 Iceberg
        • 使用 PALO 和 Hudi
        • 使用 PALO 和 LakeSoul
      • 数据湖构建
        • Iceberg
        • Hive
      • 数据湖分析
        • Hudi Catalog
        • 阿里云 DLF
        • Iceberg Catalog
        • Paimon Catalog
        • Hive Catalog
    • 数据表设计
      • 行业混存
      • 数据压缩
      • Schema 变更
      • 数据类型
      • 自增列
      • 概览
      • 数据库建表最佳实践
      • 冷热数据分层
        • SSD 和 HDD 层级存储
        • 远程存储
        • 冷热数据分层概述
      • 表索引
        • 倒排索引
        • 前缀索引与排序键
        • N-Gram 索引
        • BloomFilter 索引
        • 索引概述
      • 数据划分
        • 数据分桶
        • 数据分布概念
        • 动态分区
        • 自动分区
        • 手动分区
        • 常见文档
      • 数据模型
        • 使用注意
        • 模型概述
        • 主键模型
        • 明细模型
        • 聚合模型
  • 版本发布历史
    • 百度数据仓库 Palo 2.0 版本全新发布
  • SQL手册
    • 字面常量
    • 别名
    • SQL-手册
    • 数据类型
    • SQL语句
    • 注释
    • 内置函数
    • 白名单管理
    • SQL操作符
    • 内置函数
      • 聚合函数
      • 位操作函数
      • 字符串函数
      • 条件函数
      • 数学函数
      • JSON解析函数
      • 类型转换函数
      • 格式转换函数
      • 通用函数
      • 时间和日期函数
      • BITMAP函数
      • 窗口函数
      • 哈希函数
      • HLL函数
    • 语法帮助
      • DML
        • INSERT
        • ROUTINE-LOAD
        • RESTORE
        • SELECT-INTO-OUTFILE
        • ALTER-ROUTINE-LOAD
        • BROKER-LOAD
        • BACKUP
        • EXPORT
        • STREAM-LOAD
      • DDL
        • CREATE-FILE
        • DROP-RESOURCE
        • CREATE-RESOURCE
        • CREATE-MATERIALIZED-VIEW
        • DROP-RESROUCE
        • CREATE-TABLE
        • DROP-REPOSITORY
        • CREATE-REPOSITORY
        • CREATE-ODBC-TABLE
      • 信息查看语句
        • SHOW-BACKUP
        • SHOW-ALTER-TABLE-MATERIALIZED-VIEW
        • SHOW-SNAPSHOT
        • SHOW-ROUTINE-LOAD
        • SHOW-CREATE-ROUTINE-LOAD
        • SHOW-ROLES
        • SHOW-GRANTS
        • SHOW-EXPORT
        • SHOW-ROUTINE-LOAD-TASK
        • SHOW-REPOSITORIES
        • SHOW-LOAD
        • SHOW-RESOURCES
        • SHOW-RESTORE
        • SHOW-PROPERTY
        • SHOW-FILE
      • 辅助命令
        • PAUSE-ROUTINE-LOAD
        • STOP-ROUTINE-LOAD
        • ALTER-ROUTINE-LOAD
        • CANCEL-LOAD
        • RESUME-ROUTINE-LOAD
      • 账户管理
        • SET-PROPERTY
        • REVOKE
        • GRANT
        • CREATE-ROLE
        • DROP-ROLE
        • CREATE-USER
        • DROP-USER
        • SET-PASSWORD
  • 快速入门
    • 快速上手
    • 存算分离
    • 存算一体
  • 典型实践
    • 如何开启Debug日志
    • 导入分析
    • 查询分析
  • 操作手册
    • 权限和子用户
    • 存算一体
      • 连接集群
      • 查询分析
      • 监控告警
        • 监控指标
        • 告警配置
      • 备份恢复
        • 通过管理页面备份与恢复
        • 备份与恢复
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 集群创建
        • 停止与删除
        • 重置管理员密码
        • 集群扩缩容
        • 集群详情
    • 存算分离
      • 连接集群
      • 计算组管理
        • 重启计算组
        • 创建计算组
      • 监控告警
        • 监控指标
        • 告警配置
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 停止与删除
        • 创建集群
        • 重置管理员密码
        • 集群详情
  • 服务等级协议SLA
    • 服务等级协议(SLA)v1.0
  • 产品概述
    • 系统架构
    • 产品特点
    • 产品介绍
  • 视频专区
    • 操作指南
    • 产品简介
  • 产品定价
    • 预付费
    • 计费说明
    • 后付费
  • 文档中心
  • arrow
  • 数据仓库PALO
  • arrow
  • 操作手册1
  • arrow
  • 查询加速1
  • arrow
  • 物化视图
  • arrow
  • 异步物化视图
  • arrow
  • 创建、查询与维护异步物化视图
本页目录
  • 物化视图创建
  • 权限说明
  • 创建语法
  • 刷新配置
  • 分区配置
  • SQL 定义
  • 直查物化视图
  • 查询透明改写
  • 条件补偿
  • JOIN 改写
  • JOIN 衍生
  • 聚合改写
  • 多维聚合改写
  • 分区补偿改写
  • 嵌套物化视图改写
  • 聚合查询使用非聚合物化视图改写
  • Explain 查询透明改写情况
  • 维护物化视图
  • 权限说明
  • 物化视图修改
  • 物化视图删除
  • 查看物化视图创建语句
  • 暂停物化视图
  • 启用物化视图
  • 取消物化视图刷新任务
  • 查询物化视图信息
  • 查询刷新任务 TASK 信息
  • 查询物化视图对应的 JOB
  • 查询物化视图的分区信息:
  • 查看物化视图表结构
  • 相关配置

创建、查询与维护异步物化视图

更新时间:2025-08-21

本文将详细说明物化视图创建、物化视图直查、查询改写和物化视图常见运维。

物化视图创建

权限说明

  • 创建物化视图:需要具有物化视图的创建权限(与建表权限相同)以及创建物化视图查询语句的查询权限(与 SELECT 权限相同)。

创建语法

Plain Text
1CREATE MATERIALIZED VIEW 
2[ IF NOT EXISTS ] <materialized_view_name>
3    [ (<columns_definition>) ] 
4    [ BUILD <build_mode> ]
5    [ REFRESH <refresh_method> [refresh_trigger]]
6    [ [DUPLICATE] KEY (<key_cols>) ]
7    [ COMMENT '<table_comment>' ]
8    [ PARTITION BY (
9        { <partition_col> 
10            | DATE_TRUNC(<partition_col>, <partition_unit>) }
11                    )]
12    [ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
13        [ BUCKETS { <bucket_count> | AUTO } ]
14    ]               
15    [ PROPERTIES (
16          -- Table property
17          <table_property>
18          -- Additional table properties
19          [ , ... ]) 
20    ]
21    AS <query>

刷新配置

build_mode 刷新时机

物化视图创建完成是否立即刷新。

  • IMMEDIATE:立即刷新,默认方式。
  • DEFERRED:延迟刷新。

refresh_method 刷新方式

  • COMPLETE:刷新所有分区。
  • AUTO:尽量增量刷新,只刷新自上次物化刷新后数据变化的分区,如果不能感知数据变化的分区,只能退化成全量刷新,刷新所有分区。

refresh_trigger 触发方式

  • ON MANUAL 手动触发

用户通过 SQL 语句触发物化视图的刷新,策略如下

检测基表的分区数据自上次刷新后是否有变化,刷新数据变化的分区。

Plain Text
1REFRESH MATERIALIZED VIEW mvName AUTO;

提示
如果物化视图定义 SQL 使用的基表是 JDBC 表,Doris 无法感知表数据变化,刷新物化视图时需要指定COMPLETE。 如果指定了 AUTO,会导致基表有数据,但是刷新后物化视图没数据。 刷新物化视图时,目前 Doris 只能感知内表和 Hive 数据源表数据变化,其他数据源逐步支持中。

不校验基表的分区数据自上次刷新后是否有变化,直接刷新物化视图的所有分区。

Plain Text
1REFRESH MATERIALIZED VIEW mvName COMPLETE;

只刷新指定的分区。

Plain Text
1REFRESH MATERIALIZED VIEW mvName partitions(partitionName1,partitionName2);

提示
partitionName 可以通过 SHOW PARTITIONS FROM mvName 获取。 从 2.1.3 版本开始支持 Hive 检测基表的分区数据自上次刷新后是否有变化,其他外表暂时还不支持。内表一直支持。

  • ON SCHEDULE 定时触发

通过物化视图的创建语句指定间隔多久刷新一次数据

如下,要求全量刷新 (REFRESH COMPLETE),物化视图每 10 小时刷新一次,并且刷新物化视图的所有分区。

Plain Text
1CREATE MATERIALIZED VIEW mv_6
2REFRESH COMPLETE ON SCHEDULE EVERY 10 hour
3AS
4SELECT * FROM lineitem;

如下,尽量增量刷新 (REFRESH AUTO),只刷新自上次物化刷新后数据变化的分区,如果不能增量刷新,就刷新所有分区,物化视图每 10 小时刷新一次(从 2.1.3 版本开始能自动计算 Hive 需要刷新的分区)。

Plain Text
1CREATE MATERIALIZED VIEW mv_7
2REFRESH AUTO ON SCHEDULE EVERY 10 hour
3PARTITION by(l_shipdate)
4AS
5SELECT * FROM lineitem;
  • ON COMMIT 自动触发

提示
自 Apache Doris 2.1.4 版本起支持此功能。

基表数据发生变更后,自动触发相关物化视图刷新,刷新的分区范围与"定时触发"一致。

如果物化视图的创建语句如下,那么当 基表 lineitem 的 t1 分区数据发生变化时,会自动触发物化视图的对应分区刷新。

Plain Text
1CREATE MATERIALIZED VIEW mv_8
2REFRESH AUTO ON COMMIT
3PARTITION by(l_shipdate)
4AS
5SELECT * FROM lineitem;

注意
如果基表的数据频繁变更,不太适合使用此种触发方式,因为会频繁构建物化刷新任务,消耗过多资源。

示例如下

建表语句

Plain Text
1CREATE TABLE IF NOT EXISTS lineitem (
2    l_orderkey    integer not null,
3    l_partkey     integer not null,
4    l_suppkey     integer not null,
5    l_linenumber  integer not null,
6    l_quantity    decimalv3(15,2) not null,
7    l_extendedprice  decimalv3(15,2) not null,
8    l_discount    decimalv3(15,2) not null,
9    l_tax         decimalv3(15,2) not null,
10    l_returnflag  char(1) not null,
11    l_linestatus  char(1) not null,
12    l_shipdate    date not null,
13    l_commitdate  date not null,
14    l_receiptdate date not null,
15    l_shipinstruct char(25) not null,
16    l_shipmode     char(10) not null,
17    l_comment      varchar(44) not null
18    )
19    DUPLICATE KEY(l_orderkey, l_partkey, l_suppkey, l_linenumber)
20    PARTITION BY RANGE(l_shipdate)
21    (FROM ('2023-10-17') TO ('2023-11-01') INTERVAL 1 DAY)
22    DISTRIBUTED BY HASH(l_orderkey) BUCKETS 3;
23
24INSERT INTO lineitem VALUES
25(1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'),
26(2, 4, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy'),
27(3, 2, 4, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-19', '2023-10-19', '2023-10-19', 'a', 'b', 'yyyyyyyyy');
28
29CREATE TABLE IF NOT EXISTS orders  (
30    o_orderkey       integer not null,
31    o_custkey        integer not null,
32    o_orderstatus    char(1) not null,
33    o_totalprice     decimalv3(15,2) not null,
34    o_orderdate      date not null,
35    o_orderpriority  char(15) not null,
36    o_clerk          char(15) not null,
37    o_shippriority   integer not null,
38    o_comment        varchar(79) not null
39    )
40DUPLICATE KEY(o_orderkey, o_custkey)
41PARTITION BY RANGE(o_orderdate)(
42FROM ('2023-10-17') TO ('2023-11-01') INTERVAL 1 DAY)
43DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3;
44
45INSERT INTO orders VALUES
46(1, 1, 'o', 9.5, '2023-10-17', 'a', 'b', 1, 'yy'),
47(1, 1, 'o', 10.5, '2023-10-18', 'a', 'b', 1, 'yy'),
48(2, 1, 'o', 11.5, '2023-10-19', 'a', 'b', 1, 'yy'),
49(3, 1, 'o', 12.5, '2023-10-19', 'a', 'b', 1, 'yy');
50    
51CREATE TABLE IF NOT EXISTS partsupp (
52      ps_partkey     INTEGER NOT NULL,
53      ps_suppkey     INTEGER NOT NULL,
54      ps_availqty    INTEGER NOT NULL,
55      ps_supplycost  DECIMALV3(15,2)  NOT NULL,
56      ps_comment     VARCHAR(199) NOT NULL 
57    )
58DUPLICATE KEY(ps_partkey, ps_suppkey)
59DISTRIBUTED BY HASH(ps_partkey) BUCKETS 3;
60
61INSERT INTO partsupp VALUES
62(2, 3, 9, 10.01, 'supply1'),
63(4, 3, 10, 11.01, 'supply2'),
64(2, 3, 10, 11.01, 'supply3');

示例 1

如下,刷新时机是创建完立即刷新BUILD IMMEDIATE,刷新方式尽量增量刷新 REFRESH AUTO, 只刷新自上次物化刷新后数据变化的分区,如果不能增量刷新,就刷新所有分区。 触发方式是手动 ON MANUAL。对于非分区全量物化视图,只有一个分区,如果基表数据发生变化,意味着要全量刷新。

Plain Text
1CREATE MATERIALIZED VIEW mv_1_0
2BUILD IMMEDIATE 
3REFRESH AUTO
4ON MANUAL    
5DISTRIBUTED BY RANDOM BUCKETS 2   
6AS   
7SELECT   
8  l_linestatus,   
9  to_date(o_orderdate) as date_alias,   
10  o_shippriority   
11FROM   
12  orders   
13  LEFT JOIN lineitem ON l_orderkey = o_orderkey;

示例 2

如下,刷新时机是延迟刷新BUILD DEFERRED,刷新方式是全量刷新 REFRESH COMPLETE, 触发时机是定时刷新 ON SCHEDULE,首次刷新时间是 2024-12-01 20:30:00, 并且每隔一天刷新一次。 如果 BUILD DEFERRED 指定为 BUILD IMMEDIATE,创建完物化视图会立即刷新一次。之后从 2024-12-01 20:30:00 每隔一天刷新一次。

提示
STARTS 的时间要晚于当前的时间

Plain Text
1CREATE MATERIALIZED VIEW mv_1_1
2BUILD DEFERRED
3REFRESH COMPLETE
4ON SCHEDULE EVERY 1 DAY STARTS '2024-12-01 20:30:00'  
5PROPERTIES ('replication_num' = '1')   
6AS   
7SELECT   
8l_linestatus,   
9to_date(o_orderdate) as date_alias,   
10o_shippriority   
11FROM   
12orders   
13LEFT JOIN lineitem ON l_orderkey = o_orderkey;

示例 3

如下,刷新时机是创建完立即刷新 BUILD IMMEDIATE,刷新方式是全量刷新 REFRESH COMPLETE, 触发方式是触发刷新 ON COMMIT,当 orders 或者 lineitem 表数据发生变化的时候,会自动触发物化视图的刷新。

Plain Text
1CREATE MATERIALIZED VIEW mv_1_1
2BUILD IMMEDIATE
3REFRESH COMPLETE
4ON COMMIT
5PROPERTIES ('replication_num' = '1')   
6AS   
7SELECT   
8l_linestatus,   
9to_date(o_orderdate) as date_alias,   
10o_shippriority   
11FROM   
12orders   
13LEFT JOIN lineitem ON l_orderkey = o_orderkey;

分区配置

如下,创建分区物化视图时,需要指定 PARTITION BY,对于分区字段引用的表达式,仅允许使用 date_trunc 函数和标识符。 以下语句是符合要求的: 分区字段引用的列仅使用了 date_trunc 函数。分区物化视图的刷新方式一般是 AUTO,即尽量增量刷新,只刷新自上次物化刷新后数据变化的分区,如果不能增量刷新,就刷新所有分区。

Plain Text
1CREATE MATERIALIZED VIEW mv_2_0 
2BUILD IMMEDIATE
3REFRESH AUTO
4ON MANUAL   
5PARTITION BY (order_date_month)   
6DISTRIBUTED BY RANDOM BUCKETS 2   
7AS   
8SELECT   
9  l_linestatus,
10  date_trunc(o_orderdate, 'month') as order_date_month,   
11  o_shippriority   
12FROM   
13  orders   
14LEFT JOIN lineitem ON l_orderkey = o_orderkey;

如下语句创建分区物化视图会失败,因为分区字段 order_date_month 使用了 date_add()函数,报错 because column to check use invalid implicit expression, invalid expression is days_add(o_orderdate#4, 2)。

Plain Text
1CREATE MATERIALIZED VIEW mv_2_1 BUILD IMMEDIATE REFRESH AUTO ON MANUAL   
2PARTITION BY (order_date_month)   
3DISTRIBUTED BY RANDOM BUCKETS 2   
4AS   
5SELECT   
6  l_linestatus,
7  date_trunc(date_add(o_orderdate, INTERVAL 2 DAY), 'month') as order_date_month,   
8  o_shippriority   
9FROM   
10  orders   
11LEFT JOIN lineitem ON l_orderkey = o_orderkey;

基表有多列分区

提示
自 Doris 2.1.0 版本起支持多列分区

目前仅支持 Hive 外表有多列分区。Hive 外表有很多多级分区的情况,例如一级分区按照日期,二级分区按照区域。物化视图可以选择 Hive 的某一级分区列作为物化视图的分区列。

例如,Hive 的建表语句如下:

Plain Text
1CREATE TABLE hive1 (
2`k1` int)
3PARTITIONED BY (
4`year` int,
5`region` string)
6STORED AS ORC;
7
8alter table hive1 add if not exists
9partition(year=2020,region="bj")
10partition(year=2020,region="sh")
11partition(year=2021,region="bj")
12partition(year=2021,region="sh")
13partition(year=2022,region="bj")
14partition(year=2022,region="sh")

当物化视图的创建语句如下时,物化视图mv_hive将有三个分区:('2020'),('2021'),('2022')

Plain Text
1CREATE MATERIALIZED VIEW mv_hive
2BUILD DEFERRED REFRESH AUTO ON MANUAL
3partition by(`year`)
4DISTRIBUTED BY RANDOM BUCKETS 2
5AS
6SELECT k1,year,region FROM hive1;

当物化视图的建表语句如下时,那么物化视图mv_hive2将有如下两个分区:('bj'),('sh'):

Plain Text
1CREATE MATERIALIZED VIEW mv_hive2
2BUILD DEFERRED REFRESH AUTO ON MANUAL
3partition by(`region`)
4DISTRIBUTED BY RANDOM BUCKETS 2
5AS
6SELECT k1,year,region FROM hive1;

使用基表部分分区

提示
自 Doris 2.1.1 版本起支持此功能

有些基表有很多分区,但是物化视图只关注最近一段时间的"热"数据,那么可以使用此功能。

基表的建表语句如下:

Plain Text
1CREATE TABLE t1 (
2    `k1` INT,
3    `k2` DATE NOT NULL
4) ENGINE=OLAP
5DUPLICATE KEY(`k1`)
6COMMENT 'OLAP'
7PARTITION BY range(`k2`)
8(
9PARTITION p26 VALUES [("2024-03-26"),("2024-03-27")),
10PARTITION p27 VALUES [("2024-03-27"),("2024-03-28")),
11PARTITION p28 VALUES [("2024-03-28"),("2024-03-29"))
12)
13DISTRIBUTED BY HASH(`k1`) BUCKETS 2;

物化视图的创建语句如以下,代表物化视图只关注最近一天的数据。若当前时间为 2024-03-28 xx:xx:xx,这样物化视图会仅有一个分区 [("2024-03-28"),("2024-03-29")]:

Plain Text
1CREATE MATERIALIZED VIEW mv1
2BUILD DEFERRED REFRESH AUTO ON MANUAL
3partition by(`k2`)
4DISTRIBUTED BY RANDOM BUCKETS 2
5PROPERTIES (
6'partition_sync_limit'='1',
7'partition_sync_time_unit'='DAY'
8)
9AS
10SELECT * FROM t1;

若时间又过了一天,当前时间为 2024-03-29 xx:xx:xx,t1则会新增一个分区[("2024-03-29"),("2024-03-30")],若此时刷新物化视图,刷新完成后,物化视图会仅有一个分区 [("2024-03-29"),("2024-03-30")]。

此外,分区字段是字符串类型时,可以设置物化视图属性 partition_date_format,例如 %Y-%m-%d 。

分区上卷

提示
自 Doris 2.1.5 版本起支持此功能

当基表数据经过聚合处理后,各分区的数据量可能会显著减少。在这种情况下,可以采用分区上卷策略,以降低物化视图的分区数量。

Range 分区

假设基表的建表语句如下:

Plain Text
1    CREATE TABLE `t1` (
2    `k1` LARGEINT NOT NULL,
3    `k2` DATE NOT NULL
4    ) ENGINE=OLAP
5    DUPLICATE KEY(`k1`)
6    COMMENT 'OLAP'
7    PARTITION BY range(`k2`)
8    (
9    PARTITION p_20200101 VALUES [("2020-01-01"),("2020-01-02")),
10    PARTITION p_20200102 VALUES [("2020-01-02"),("2020-01-03")),
11    PARTITION p_20200201 VALUES [("2020-02-01"),("2020-02-02"))
12    )
13    DISTRIBUTED BY HASH(`k1`) BUCKETS 2;

若物化视图的创建语句如下,则该物化视图将包含两个分区:[("2020-01-01","2020-02-01")]和 [("2020-02-01","2020-03-01")]

Plain Text
1    CREATE MATERIALIZED VIEW mv_3
2    BUILD DEFERRED REFRESH AUTO ON MANUAL
3    partition by (date_trunc(`k2`,'month'))
4    DISTRIBUTED BY RANDOM BUCKETS 2
5    AS
6    SELECT * FROM t1;

若物化视图的创建语句如下,则该物化视图将只包含一个分区:[("2020-01-01","2021-01-01")]

Plain Text
1    CREATE MATERIALIZED VIEW mv_4
2    BUILD DEFERRED REFRESH AUTO ON MANUAL
3    partition by (date_trunc(`k2`,'year'))
4    DISTRIBUTED BY RANDOM BUCKETS 2
5    AS
6    SELECT * FROM t1;

此外,如果分区字段为字符串类型,可以通过设置物化视图的 partition_date_format 属性来指定日期格式,例如 '%Y-%m-%d'。

SQL 定义

异步物化视图 SQL 定义没有限制。

直查物化视图

物化视图可以看作是表,可以对物化视图添加过滤条件和聚合等,进行直接查询。

物化视图的定义:

Plain Text
1CREATE MATERIALIZED VIEW mv_5
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT t1.l_linenumber,
6       o_custkey,
7       o_orderdate
8FROM (SELECT * FROM lineitem WHERE l_linenumber > 1) t1
9LEFT OUTER JOIN orders
10ON l_orderkey = o_orderkey;

原查询如下

Plain Text
1SELECT t1.l_linenumber,
2       o_custkey,
3       o_orderdate
4FROM (SELECT * FROM lineitem WHERE l_linenumber > 1) t1
5LEFT OUTER JOIN orders
6ON l_orderkey = o_orderkey
7WHERE o_orderdate = '2023-10-18';

等价的直查物化语句如下,用户需要手动修改查询

Plain Text
1SELECT
2l_linenumber,
3o_custkey
4FROM mv_5
5WHERE l_linenumber > 1 and o_orderdate = '2023-10-18';

查询透明改写

透明改写指在处理查询时,用户无需手动修改查询,系统会自动优化并改写查询。 Doris 异步物化视图采用基于 SPJG(SELECT-PROJECT-JOIN-GROUP-BY)模式的透明改写算法。 该算法能够分析 SQL 的结构信息,自动寻找合适的物化视图进行透明改写,并选择最优的物化视图来响应查询 SQL。 Doris 提供了丰富且全面的透明改写能力。

条件补偿

查询和物化视图的条件不必完全相同,通过在物化视图上补偿条件来表达查询,可以最大限度地复用物化视图,不用重复构建物化视图。

当物化视图和查询的 where条件是通过and 连接的表达式时:

  1. 当查询的表达式包含物化视图的表达式时:

可以进行条件补偿。

例如,查询是 a > 5 and b > 10 and c = 7,物化的条件是 a > 5 and b > 10,物化视图的条件是查询条件的子集,那么只需补偿 c = 7条件即可。

  1. 当查询的表达式不完全包含物化视图的表达式时:

查询的条件可以推导出物化视图的条件时(常见的是比较和范围表达式,如 >、<、=、in 等),也可以进行条件补偿。补偿结果就是查询条件本身。

例如,查询是 a > 5 and b = 10,物化视图是 a > 1 and b > 8,可见物化的条件包含了查询的条件,查询的条件可以推导出物化视图的条件,这样也可以进行补偿,补偿结果就是 a > 5 and b = 10。

条件补偿使用限制:

对于通过 or 连接的表达式,不能进行条件补偿,必须一样才可以改写成功。

对于 like 这种非比较和范围表达式,不能进行条件补偿,必须一样才可以改写成功。

例如

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv1
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT t1.l_linenumber,
6       o_custkey,
7       o_orderdate
8FROM (SELECT * FROM lineitem WHERE l_linenumber > 1) t1
9LEFT OUTER JOIN orders
10ON l_orderkey = o_orderkey;

如下查询都可以命中物化视图,多个查询通过透明改写可以复用一个物化视图, 减少查询改写时间,节省物化视图构建成本。

Plain Text
1SELECT l_linenumber,
2       o_custkey,
3       o_orderdate
4FROM lineitem
5LEFT OUTER JOIN orders
6ON l_orderkey = o_orderkey
7WHERE l_linenumber > 2;
Plain Text
1SELECT l_linenumber,
2       o_custkey,
3       o_orderdate
4FROM lineitem
5LEFT OUTER JOIN orders
6ON l_orderkey = o_orderkey
7WHERE l_linenumber > 2 and o_orderdate = '2023-10-19';

JOIN 改写

JOIN 改写指的是查询和物化使用的表相同,可以在物化视图和查询的 JOIN 输入或者 JOIN 的外层写where,优化器对此模式的查询会尝试进行透明改写。

支持多表 JOIN,支持的 JOIN 类型为:

  • INNER JOIN
  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN
  • LEFT SEMI JOIN
  • RIGHT SEMI JOIN
  • LEFT ANTI JOIN
  • RIGHT ANTI JOIN

例如:

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv2
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT t1.l_linenumber,
6       o_custkey,
7       o_orderdate
8FROM (SELECT * FROM lineitem WHERE l_linenumber > 1) t1
9LEFT OUTER JOIN orders
10ON l_orderkey = o_orderkey;

如下查询可进行透明改写,条件 l_linenumber > 1 可以上拉,从而进行透明改写,使用物化视图的预计算结果来表达查询。 命中物化视图后,可以节省 join 计算。

查询语句:

Plain Text
1SELECT l_linenumber,
2       o_custkey
3FROM lineitem
4LEFT OUTER JOIN orders
5ON l_orderkey = o_orderkey
6WHERE l_linenumber > 1 and o_orderdate = '2023-10-18';

JOIN 衍生

当查询和物化视图的 JOIN 类型不一致时,如果物化视图能够提供查询所需的所有数据,那么通过在 JOIN 的外部补偿谓词,也可以进行透明改写。

例如

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv3
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT
6    l_shipdate, l_suppkey, o_orderdate,
7    sum(o_totalprice) AS sum_total,
8    max(o_totalprice) AS max_total,
9    min(o_totalprice) AS min_total,
10    count(*) AS count_all,
11    count(distinct CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END) AS bitmap_union_basic
12FROM lineitem
13LEFT OUTER JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND l_shipdate = o_orderdate
14GROUP BY
15l_shipdate,
16l_suppkey,
17o_orderdate;

查询语句:

Plain Text
1SELECT
2    l_shipdate, l_suppkey, o_orderdate,
3    sum(o_totalprice) AS sum_total,
4    max(o_totalprice) AS max_total,
5    min(o_totalprice) AS min_total,
6    count(*) AS count_all,
7    count(distinct CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END) AS bitmap_union_basic
8FROM lineitem
9INNER JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND l_shipdate = o_orderdate
10WHERE o_orderdate = '2023-10-18' AND l_suppkey = 3
11GROUP BY
12l_shipdate,
13l_suppkey,
14o_orderdate;

聚合改写

当查询和物化视图定义中的 group 维度一致时,如果物化视图使用的 group by 维度和查询的 group by 维度相同,并且查询使用的聚合函数可以使用物化视图的聚合函数来表示,那么可以进行透明改写。

例如

物化视图定义

Plain Text
1CREATE MATERIALIZED VIEW mv4
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT
6    o_shippriority, o_comment,
7    count(distinct CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END) AS cnt_1,
8    count(distinct CASE WHEN O_SHIPPRIORITY > 2 AND o_orderkey IN (2) THEN o_custkey ELSE null END) AS cnt_2,
9    sum(o_totalprice),
10    max(o_totalprice),
11    min(o_totalprice),
12    count(*)
13FROM orders
14GROUP BY
15o_shippriority,
16o_comment;

如下查询可以进行透明改写,因为查询和物化视图使用的聚合维度一致,可以使用物化视图 o_shippriority 字段进行过滤结果。查询中的 group by 维度和聚合函数可以使用物化视图的 group by 维度和聚合函数来改写。 命中聚合物化视图后,可以减少聚合计算。

查询语句:

Plain Text
1SELECT 
2    o_shippriority, o_comment,
3    count(distinct CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END) AS cnt_1,
4    count(distinct CASE WHEN O_SHIPPRIORITY > 2 AND o_orderkey IN (2) THEN o_custkey ELSE null END) AS cnt_2,
5    sum(o_totalprice),
6    max(o_totalprice),
7    min(o_totalprice),
8    count(*)
9FROM orders
10WHERE o_shippriority in (1, 2)
11GROUP BY
12o_shippriority,
13o_comment;

聚合改写(上卷) 在查询和物化视图定义中,即使聚合的维度不一致,也可以进行改写。物化视图使用的 group by 维度需要包含查询的group by 维度,而查询可以没有 group by。并且,查询使用的聚合函数可以用物化视图的聚合函数来表示。

例如

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv5
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5SELECT
6    l_shipdate, o_orderdate, l_partkey, l_suppkey,
7    sum(o_totalprice) AS sum_total,
8    max(o_totalprice) AS max_total,
9    min(o_totalprice) AS min_total,
10    count(*) AS count_all,
11    bitmap_union(to_bitmap(CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END)) AS bitmap_union_basic
12FROM lineitem
13LEFT OUTER JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND l_shipdate = o_orderdate
14GROUP BY
15l_shipdate,
16o_orderdate,
17l_partkey,
18l_suppkey;

以下查询可以进行透明改写。查询和物化视图使用的聚合维度不一致,但物化视图使用的维度包含了查询的维度。查询可以使用维度中的字段对结果进行过滤。查询会尝试使用物化视图 SELECT后的函数进行上卷, 例如,物化视图的 bitmap_union 最后会上卷成 bitmap_union_count,这和查询中的 count(distinct) 的语义保持一致。

通过聚合上卷,同一个物化视图可以被多个查询复用,节省物化视图构建成本。

查询语句:

Plain Text
1SELECT
2    l_shipdate, l_suppkey,
3    sum(o_totalprice) AS sum_total,
4    max(o_totalprice) AS max_total,
5    min(o_totalprice) AS min_total,
6    count(*) AS count_all,
7    count(distinct CASE WHEN o_shippriority > 1 AND o_orderkey IN (1, 3) THEN o_custkey ELSE null END) AS bitmap_union_basic
8FROM lineitem
9LEFT OUTER JOIN orders ON lineitem.l_orderkey = orders.o_orderkey AND l_shipdate = o_orderdate
10WHERE o_orderdate = '2023-10-18' AND l_partkey = 3
11GROUP BY
12l_shipdate,
13l_suppkey;

目前支持的聚合上卷函数列表如下:

查询中函数 物化视图中函数 函数上卷后
max max max
min min min
sum sum sum
count count sum
count(distinct) bitmap_union bitmap_union_count
bitmap_union bitmap_union bitmap_union
bitmap_union_count bitmap_union bitmap_union_count
hll_union_agg, approx_count_distinct, hll_cardinality hll_union 或者 hll_raw_agg hll_union_agg
any_value any_value 或者 select 后有 any_value 使用的列 any_value

多维聚合改写

支持多维聚合的透明改写,即如果物化视图中没有使用GROUPING SETS, CUBE, ROLLUP,而查询中有多维聚合,并且物化视图 group by 后的字段包含查询中多维聚合的所有字段,那么也可以进行透明改写。

例如

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv5_1
2BUILD IMMEDIATE REFRESH AUTO ON SCHEDULE EVERY 1 hour
3DISTRIBUTED BY RANDOM BUCKETS 3
4AS
5select o_orderstatus, o_orderdate, o_orderpriority,
6       sum(o_totalprice) as sum_total,
7       max(o_totalprice) as max_total,
8       min(o_totalprice) as min_total,
9       count(*) as count_all
10from orders
11group by
12o_orderstatus, o_orderdate, o_orderpriority;

如下查询可以命中物化视图,复用了物化视图的聚合结果,节省计算

查询语句:

Plain Text
1select o_orderstatus, o_orderdate, o_orderpriority,
2       sum(o_totalprice),
3       max(o_totalprice),
4       min(o_totalprice),
5       count(*)
6from orders
7group by
8GROUPING SETS ((o_orderstatus, o_orderdate), (o_orderpriority), (o_orderstatus), ());

分区补偿改写

当分区物化视图不足以提供查询的所有数据时,可以使用 union all的方式,将查询原表和物化视图的数据 union all 作为最终返回结果。

例如

物化视图定义:

Plain Text
1CREATE MATERIALIZED VIEW mv7
2BUILD IMMEDIATE REFRESH AUTO ON MANUAL
3partition by(l_shipdate)
4DISTRIBUTED BY RANDOM BUCKETS 2
5as
6select l_shipdate, o_orderdate, l_partkey,
7       l_suppkey, sum(o_totalprice) as sum_total
8from lineitem
9left join orders on lineitem.l_orderkey = orders.o_orderkey and l_shipdate = o_orderdate
10group by
11    l_shipdate,
12    o_orderdate,
13    l_partkey,
14    l_suppkey;

当基表新增分区 2023-10-21 时,并且物化视图还未刷新时,可以通过物化视图 union all 原表的方式返回结果。

Plain Text
1insert into lineitem values
2(1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-21', '2023-10-21', '2023-10-21', 'a', 'b', 'yyyyyyyyy');

查询语句:

Plain Text
1select l_shipdate, o_orderdate, l_partkey, l_suppkey, sum(o_totalprice) as sum_total
2from lineitem
3left join orders on lineitem.l_orderkey = orders.o_orderkey and l_shipdate = o_orderdate
4group by
5    l_shipdate,
6    o_orderdate,
7    l_partkey,
8    l_suppkey;

查询可以部分使用物化预计算的结果,节省了这部分的计算。

改写结果示意:

Plain Text
1SELECT *
2FROM mv7
3union all
4select t1.l_shipdate, o_orderdate, t1.l_partkey, t1.l_suppkey, sum(o_totalprice) as sum_total
5from (select * from lineitem where l_shipdate = '2023-10-21') t1
6left join orders on t1.l_orderkey = orders.o_orderkey and t1.l_shipdate = o_orderdate
7group by
8    t1.l_shipdate,
9    o_orderdate,
10    t1.l_partkey,
11    t1.l_suppkey;

注意
目前支持分区补偿,暂时不支持带条件的 UNION ALL 补偿。
比如,如果物化视图带有 where 条件,以上述为例,如果构建物化的过滤条件加上 WHERE l_shipdate > '2023-10-19',而查询是 WHERE l_shipdate > '2023-10-18',目前这种还无法通过 UNION ALL 补偿,待支持。

嵌套物化视图改写

物化视图的定义 SQL 可以使用物化视图,此物化视图称为嵌套物化视图。 嵌套的层数理论上没有限制,此物化视图既可以直查,也可以进行透明改写。嵌套物化视图同样可以参与透明改写。

例如

*创建内层物化视图 `mv8_0_inner_mv`*:

Plain Text
1CREATE MATERIALIZED VIEW mv8_0_inner_mv
2BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
3DISTRIBUTED BY RANDOM BUCKETS 2
4AS
5select
6l_linenumber,
7o_custkey,
8o_orderkey,
9o_orderstatus,
10l_partkey,
11l_suppkey,
12l_orderkey
13from lineitem
14inner join orders on lineitem.l_orderkey = orders.o_orderkey;

创建外层物化视图mv8_0:

Plain Text
1CREATE MATERIALIZED VIEW mv8_0
2BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
3DISTRIBUTED BY RANDOM BUCKETS 2
4AS
5select
6l_linenumber,
7o_custkey,
8o_orderkey,
9o_orderstatus,
10l_partkey,
11l_suppkey,
12l_orderkey,
13ps_availqty
14from mv8_0_inner_mv
15inner join partsupp on l_partkey = ps_partkey AND l_suppkey = ps_suppkey;

对于以下查询,mv8_0_inner_mv和 mv8_0 都会成功进行改写,最终代价模型会选择 mv8_0。

嵌套物化视图常用于数据建模和特别复杂的查询,如果单独构建一个物化视图无法透明改写,可以将复杂的查询拆分,构建嵌套物化视图,透明改写会尝试使用嵌套物化视图改写, 如果改写成功,会节省计算,提高查询性能。

Plain Text
1select lineitem.l_linenumber
2from lineitem
3inner join orders on l_orderkey = o_orderkey
4inner join partsupp on  l_partkey = ps_partkey AND l_suppkey = ps_suppkey
5where o_orderstatus = 'o'

注意:

  1. 嵌套物化视图的层数越多,透明改写的耗时会相应增加。建议嵌套物化视图层数不要超过 3 层。
  2. 嵌套物化视图透明改写默认关闭,开启方式见下面的相关设置。

聚合查询使用非聚合物化视图改写

如果查询是聚合查询,物化视图不包含聚合,但是物化视图可以提供查询使用的所有列,那么也可以改写,比如查询先是 join 连接,之后是 group by 聚合,命中包含 join 连接的物化视图,那么也是有收益的。

Plain Text
1CREATE MATERIALIZED VIEW mv10_0
2BUILD IMMEDIATE REFRESH AUTO ON MANUAL
3DISTRIBUTED BY RANDOM BUCKETS 2
4as
5select l_shipdate, o_orderdate, l_partkey,
6       l_suppkey, o_totalprice
7from lineitem
8left join orders on lineitem.l_orderkey = orders.o_orderkey and l_shipdate = o_orderdate;

如下查询可以命中 mv10_0 的物化视图,节省了lineitem join orders 连接的计算

Plain Text
1select l_shipdate, o_orderdate, l_partkey,
2       l_suppkey, sum(o_totalprice) as sum_total
3from lineitem
4left join orders on lineitem.l_orderkey = orders.o_orderkey and l_shipdate = o_orderdate
5group by
6    l_shipdate,
7    o_orderdate,
8    l_partkey,
9    l_suppkey;

Explain 查询透明改写情况

查询透明改写命中情况,用于查看和调试。

1. 如果需要查看物化视图的透明改写命中情况,该语句会展示查询透明改写的简要过程信息。

Plain Text
1explain <query_sql> 

返回的信息如下,此处截取了与物化视图相关的信息:

Plain Text
1| MaterializedView                                                                                                                                                                                                                                      |
2| MaterializedViewRewriteSuccessAndChose:                                                                                                                                                                                                               |
3|   Names: mv5                                                                                                                                                                                                                                          |
4| MaterializedViewRewriteSuccessButNotChose:                                                                                                                                                                                                            |
5|                                                                                                                                                                                                                                                       |
6| MaterializedViewRewriteFail:                                                                                                                                                                                                                          |
7|   Name: mv4                                                                                                                                                                                                                                           |
8|   FailSummary: Match mode is invalid, View struct info is invalid                                                                                                                                                                                     |
9|   Name: mv3                                                                                                                                                                                                                                           |
10|   FailSummary: Match mode is invalid, Rewrite compensate predicate by view fail, View struct info is invalid                                                                                                                                          |
11|   Name: mv1                                                                                                                                                                                                                                           |
12|   FailSummary: The columns used by query are not in view, View struct info is invalid                                                                                                                                                                 |
13|   Name: mv2                                                                                                                                                                                                                                           |
14|   FailSummary: The columns used by query are not in view, View struct info is invalid
  • MaterializedViewRewriteSuccessAndChose:表示透明改写成功,并且 CBO(Cost-Based Optimizer)选择的物化视图名称列表。
  • MaterializedViewRewriteSuccessButNotChose:表示透明改写成功,但是最终 CBO 没有选择的物化视图名称列表。
  • MaterializedViewRewriteFail:列举透明改写失败的情况及原因摘要。

2. 如果想了解物化视图的候选、改写以及最终选择情况的详细过程信息,可以执行如下语句:

Plain Text
1explain memo plan <query_sql>

维护物化视图

权限说明

  • 删除物化视图:需要具有物化视图的删除权限(与删除表权限相同)。
  • 修改物化视图:需要具有物化视图的修改权限(与修改表权限相同)。
  • 暂停/恢复/取消/刷新物化视图:需要具有物化视图的创建权限。

物化视图修改

修改物化视图属性

Plain Text
1ALTER MATERIALIZED VIEW mv_1
2SET(
3  "grace_period" = "10"
4);

物化视图重命名,即物化视图原子替换

Plain Text
1CREATE MATERIALIZED VIEW mv9_0
2BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL
3DISTRIBUTED BY RANDOM BUCKETS 2
4PROPERTIES ('replication_num' = '1') 
5AS
6select
7  l_linenumber,
8  o_custkey,
9  o_orderkey,
10  o_orderstatus,
11  l_partkey,
12  l_suppkey,
13  l_orderkey
14from lineitem
15inner join orders on lineitem.l_orderkey = orders.o_orderkey;

使用 mv9_0 的物化视图替换 mv7,并且删除 mv7。

Plain Text
1ALTER MATERIALIZED VIEW mv7
2REPLACE WITH MATERIALIZED VIEW mv9_0
3PROPERTIES('swap' = 'false');

物化视图删除

Plain Text
1DROP MATERIALIZED VIEW mv_1;

查看物化视图创建语句

Plain Text
1SHOW CREATE MATERIALIZED VIEW mv_1;

暂停物化视图

详情参考 PAUSE MATERIALIZED VIEW

启用物化视图

详情参考 RESUME MATERIALIZED VIEW

取消物化视图刷新任务

详情参考 CANCEL MATERIALIZED VIEW TASK

查询物化视图信息

Plain Text
1SELECT * 
2FROM mv_infos('database'='db_name')
3WHERE Name = 'mv_name' \G 

返回结果如下:

Plain Text
1*************************** 1. row ***************************
2                Id: 139570
3              Name: mv11
4           JobName: inner_mtmv_139570
5             State: NORMAL
6SchemaChangeDetail: 
7      RefreshState: SUCCESS
8       RefreshInfo: BUILD IMMEDIATE REFRESH AUTO ON MANUAL
9          QuerySql: SELECT l_shipdate, l_orderkey, O_ORDERDATE, count(*)
10FROM lineitem  
11LEFT OUTER JOIN orders on l_orderkey = o_orderkey
12GROUP BY l_shipdate, l_orderkey, O_ORDERDATE
13           EnvInfo: EnvInfo{ctlId='0', dbId='16813'}
14      MvProperties: {}
15   MvPartitionInfo: MTMVPartitionInfo{partitionType=FOLLOW_BASE_TABLE, relatedTable=lineitem, relatedCol='l_shipdate', partitionCol='l_shipdate'}
16SyncWithBaseTables: 1
  • SyncWithBaseTables: 表示物化视图和基表的数据是否一致。

对于全量构建的物化视图,此字段为 1,表明此物化视图可用于透明改写。

对于分区增量的物化视图,分区物化视图是否可用,是以分区粒度去看的。也就是说,即使物化视图的部分分区不可用,但只要查询的是有效分区,那么此物化视图依旧可用于透明改写。是否能透明改写,主要看查询所用分区的 SyncWithBaseTables 字段是否一致。如果 SyncWithBaseTables 是 1,此分区可用于透明改写;如果是 0,则不能用于透明改写。

  • JobName: 物化视图构建 Job 的名称,每个物化视图有一个 Job,每次刷新会有一个新的 Task,Job 和 Task 是 1:n 的关系
  • State: 如果变为 SCHEMA_CHANGE,代表基表的 Schema 发生了变化,此时物化视图将不能用来透明改写 (但是不影响直接查询物化视图),下次刷新任务如果执行成功,将恢复为 NORMAL。
  • SchemaChangeDetail: 表示 SCHEMA_CHANGE 发生的原因。
  • RefreshState: 物化视图最后一次任务刷新的状态。如果为 FAIL,代表执行失败,可以通过 tasks() 命令进一步定位失败原因。Task 命令见本文[查询刷新任务 TASK 信息](### 查询刷新任务 TASK 信息)。
  • SyncWithBaseTables: 是否和基表数据同步。1 为同步,0 为不同步。如果不同步,可通过 show partitions 进一步判断哪个分区不同步。show partitions 见下文分区物化视图查看 SyncWithBaseTables 状态方法。

对于透明改写,通常物化视图会出现两种状态:

  • 状态正常: 指的是当前物化视图是否可用于透明改写。
  • 不可用、状态不正常: 指的是物化视图不能用于透明改写的简称。尽管如此,该物化视图还是可以直查的。

详情参考 MV_INFOS

查询刷新任务 TASK 信息

每个物化视图有一个 Job,每次刷新会有一个新的 Task,Job 和 Task 是 1:n 的关系。 根据物化视图名称查看物化视图的 Task 状态,运行如下语句,可以查看刷新任务的状态和进度:

Plain Text
1SELECT * 
2FROM tasks("type"="mv")
3WHERE
4MvDatabaseName = 'mv_db_name' and    
5mvName = 'mv_name'
6ORDER BY  CreateTime DESC \G

返回结果如下:

Plain Text
1*************************** 1. row ***************************
2               TaskId: 167019363907545
3                JobId: 139872
4              JobName: inner_mtmv_139570
5                 MvId: 139570
6               MvName: mv11
7         MvDatabaseId: 16813
8       MvDatabaseName: regression_test_nereids_rules_p0_mv
9               Status: SUCCESS
10             ErrorMsg: 
11           CreateTime: 2024-06-21 10:31:43
12            StartTime: 2024-06-21 10:31:43
13           FinishTime: 2024-06-21 10:31:45
14           DurationMs: 2466
15          TaskContext: {"triggerMode":"SYSTEM","isComplete":false}
16          RefreshMode: COMPLETE
17NeedRefreshPartitions: ["p_20231023_20231024","p_20231019_20231020","p_20231020_20231021","p_20231027_20231028","p_20231030_20231031","p_20231018_20231019","p_20231024_20231025","p_20231021_20231022","p_20231029_20231030","p_20231028_20231029","p_20231025_20231026","p_20231022_20231023","p_20231031_20231101","p_20231016_20231017","p_20231026_20231027"]
18  CompletedPartitions: ["p_20231023_20231024","p_20231019_20231020","p_20231020_20231021","p_20231027_20231028","p_20231030_20231031","p_20231018_20231019","p_20231024_20231025","p_20231021_20231022","p_20231029_20231030","p_20231028_20231029","p_20231025_20231026","p_20231022_20231023","p_20231031_20231101","p_20231016_20231017","p_20231026_20231027"]
19             Progress: 100.00% (15/15)
20          LastQueryId: fe700ca3d6504521-bb522fc9ccf615e3
  • NeedRefreshPartitions,CompletedPartitions 记录的是此次 Task 刷新的分区。
  • Status:如果为 FAILED,代表运行失败,可通过 ErrorMsg 查看失败原因,也可通过 LastQueryId 来搜索 Doris 的日志,获取更详细的错误信息。目前任务失败会导致已有物化视图不可用,后面会改成尽管任务失败,但是已存在的物化视图可用于透明改写。
  • ErrorMsg:失败原因。
  • RefreshMode:COMPLETE 代表刷新了全部分区,PARTIAL 代表刷新了部分分区,NOT_REFRESH 代表不需要刷新任何分区。

备注

  • 如果物化视图创建的时候设置了 grace_period 属性,那么即使 SyncWithBaseTables 是 false 或者 0,有些情况下它依然可用于透明改写。
  • grace_period 的单位是秒,指的是容许物化视图和所用基表数据不一致的时间。
  • 如果设置成 0,意味着要求物化视图和基表数据保持一致,此物化视图才可用于透明改写。
  • 如果设置成 10,意味着物化视图和基表数据允许 10 秒的延迟,如果物化视图的数据和基表的数据有延迟,在 10 秒内,此物化视图都可以用于透明改写。

  • 查询物化视图对应的 JOB

    Plain Text
    1SELECT * 
    2FROM jobs("type"="mv") 
    3WHERE Name="inner_mtmv_75043";

    查询物化视图的分区信息:

    分区物化视图查看 SyncWithBaseTables 状态方法

    运行show partitions from mv_name查看查询使用的分区是否有效,返回结果如下:

    Plain Text
    1show partitions from mv11;
    2+-------------+---------------------+----------------+---------------------+--------+--------------+--------------------------------------------------------------------------------+-----------------+---------+----------------+---------------+---------------------+---------------------+--------------------------+-----------+------------+-------------------------+-----------+--------------------+--------------+
    3| PartitionId | PartitionName       | VisibleVersion | VisibleVersionTime  | State  | PartitionKey | Range                                                                          | DistributionKey | Buckets | ReplicationNum | StorageMedium | CooldownTime        | RemoteStoragePolicy | LastConsistencyCheckTime | DataSize  | IsInMemory | ReplicaAllocation       | IsMutable | SyncWithBaseTables | UnsyncTables |
    4+-------------+---------------------+----------------+---------------------+--------+--------------+--------------------------------------------------------------------------------+-----------------+---------+----------------+---------------+---------------------+---------------------+--------------------------+-----------+------------+-------------------------+-----------+--------------------+--------------+
    5| 140189      | p_20231016_20231017 | 1              | 2024-06-21 10:31:45 | NORMAL | l_shipdate   | [types: [DATEV2]; keys: [2023-10-16]; ..types: [DATEV2]; keys: [2023-10-17]; ) | l_orderkey      | 10      | 1              | HDD           | 9999-12-31 23:59:59 |                     | NULL                     | 0.000     | false      | tag.location.default: 1 | true      | true               | []           |
    6| 139995      | p_20231018_20231019 | 2              | 2024-06-21 10:31:44 | NORMAL | l_shipdate   | [types: [DATEV2]; keys: [2023-10-18]; ..types: [DATEV2]; keys: [2023-10-19]; ) | l_orderkey      | 10      | 1              | HDD           | 9999-12-31 23:59:59 |                     | NULL                     | 880.000 B | false      | tag.location.default: 1 | true      | true               | []           |
    7| 139898      | p_20231019_20231020 | 2              | 2024-06-21 10:31:43 | NORMAL | l_shipdate   | [types: [DATEV2]; keys: [2023-10-19]; ..types: [DATEV2]; keys: [2023-10-20]; ) | l_orderkey      | 10      | 1              | HDD           | 9999-12-31 23:59:59 |                     | NULL                     | 878.000 B | false      | tag.location.default: 1 | true      | true               | []           |
    8+-------------+---------------------+----------------+---------------------+--------+--------------+--------------------------------------------------------------------------------+-----------------+---------+----------------+---------------+---------------------+---------------------+--------------------------+-----------+------------+-------------------------+-----------+--------------------+--------------+

    主要查看 SyncWithBaseTables 字段是否为 true。false 表示此分区不可用于透明改写。

    详情参考 SHOW PARTITIONS

    查看物化视图表结构

    详情参考 DESCRIBE

    相关配置

    Session Variables 开关

    开关 说明
    SET enable_nereids_planner = true; 异步物化视图只有在新优化器下才支持,所以物化视图透明改写没有生效时,需要开启新优化器
    SET enable_materialized_view_rewrite = true; 开启或者关闭查询透明改写,从 2.1.5 版本开始默认开启
    SET materialized_view_rewrite_enable_contain_external_table = true; 参与透明改写的物化视图是否允许包含外表,默认不允许,如果物化视图的定义 SQL 中包含外表,也想参与到透明改写,可以打开此开关。
    SET materialized_view_rewrite_success_candidate_num = 3; 透明改写成功的结果集合,允许参与到 CBO 候选的最大数量,默认是 3。如果发现透明改写的性能很慢,可以考虑把这个值调小。
    SET enable_materialized_view_union_rewrite = true; 当分区物化视图不足以提供查询的全部数据时,是否允许基表和物化视图 union all 来响应查询,默认允许。如果发现命中物化视图时数据错误,可以把此开关关闭。
    SET enable_materialized_view_nest_rewrite = true; 是否允许嵌套改写,默认不允许。如果查询 SQL 很复杂,需要构建嵌套物化视图才可以命中,那么需要打开此开关。
    SET materialized_view_relation_mapping_max_count = 8; 透明改写过程中,relation mapping 最大允许数量,如果超过,进行截取。relation mapping 通常由表自关联产生,数量一般会是笛卡尔积,比如 3 张表,可能会产生 8 种组合。默认是 8。如果发现透明改写时间很长,可以把这个值调低
    SET enable_dml_materialized_view_rewrite = true; DML 时,是否开启基于结构信息的物化视图透明改写,默认开启
    SET enable_dml_materialized_view_rewrite_when_base_table_unawareness = true; DML 时,当物化视图存在无法实时感知数据的外表时,是否开启基于结构信息的物化视图透明改写,默认关闭

    fe.conf 配置

    • job_mtmv_task_consumer_thread_num: 此参数控制同时运行的物化视图刷新任务数量,默认是 10,超过这个数量的任务将处于 pending 状态 修改这个参数需要重启 FE 才可以生效。

    上一篇
    异步物化视图概述
    下一篇
    数据导入