当前位置: 首页 > news >正文

doris:异步物化视图概述

物化视图作为一种高效的解决方案,兼具了视图的灵活性和物理表的高性能优势。 它能够预先计算并存储查询的结果集,从而在查询请求到达时,直接从已存储的物化视图中快速获取结果,避免了重新执行复杂的查询语句所带来的开销。

使用场景​

  • 查询加速与并发提升:物化视图能够显著提高查询速度,同时增强系统的并发处理能力,有效减少资源消耗。
  • 简化 ETL 流程:在数据抽取、转换和加载(ETL)过程中,物化视图能够简化流程,提升开发效率,使数据处理更加顺畅。
  • 加速湖仓一体架构中的外表查询:在湖仓一体架构中,物化视图能够显著提升对外部数据源的查询速度,提高数据访问效率。
  • 提升写入效率:通过减少资源竞争,物化视图能够优化数据写入过程,提高写入效率,确保数据的一致性和完整性。

使用限制​

  • 异步物化视图与基表数据一致性:异步物化视图与基表的数据最终会保持一致,但无法实时同步,即无法保持实时一致性。
  • 窗口函数查询支持:当前,如果查询中包含了窗口函数,暂不支持将该查询透明地改写为利用物化视图的形式。
  • 物化视图连接表多于查询表:如果物化视图所连接的表数量多于查询所涉及的表(例如,查询仅涉及 t1 和 t2,而物化视图则包含了 t1、t2 以及额外的 t3), 则系统目前不支持将该查询透明地改写为利用该物化视图的形式。
  • 如果物化视图包含 UNION ALL 等集合操作,LIMIT,ORDER BY,CROSS JOIN,物化视图可以正常构建,但是不能用于透明改写。

原理介绍​

物化视图,作为数据库中的一种高级特性,其实质为类型 MTMV 的内表。在创建物化视图时,系统会同时注册一个刷新任务。此任务会在需要时运行,执行 INSERT OVERWRITE 语句,以将最新的数据写入物化视图中。

刷新机制 与同步物化视图所采用的实时增量刷新不同,异步物化视图提供了更为灵活的刷新选项

  • 全量刷新: 在此模式下,系统会重新计算物化视图定义 SQL 所涉及的所有数据,并将结果完整地写入物化视图。 此过程确保了物化视图中的数据与基表数据保持一致,但可能会消耗更多的计算资源和时间。

  • 分区增量刷新: 当物化视图的基表分区数据发生变化时,系统能够智能地识别出这些变化,并仅针对受影响的分区进行刷新。 这种机制显著降低了刷新物化视图所需的计算资源和时间,同时保证了数据的最终一致性。

透明改写: 透明改写是数据库优化查询性能的一种重要手段。在处理用户查询时,系统能够自动对 SQL 进行优化和改写, 以提高查询的执行效率和降低计算成本。这一改写过程对用户而言是透明的,无需用户进行任何干预。

Doris 异步物化视图采用了基于 SPJG(SELECT-PROJECT-JOIN-GROUP-BY)模式的透明改写算法。 该算法能够深入分析 SQL 的结构信息,自动寻找并选择合适的物化视图进行透明改写。在多个物化视图可供选择时, 算法还会根据一定的策略(如成本模型)选择最优的物化视图来响应查询 SQL,从而进一步提升查询性能。

物化刷新数据湖支持情况​

物化刷新数据湖的支持情况,不同类型的表和 Catalog 有不同的支持程度

表类型Catalog 类型刷新方式刷新时机
全量刷新分区刷新自动触发
内表Internal2.1 支持2.1 支持2.1.4 支持
HiveHive2.1 支持2.1 支持不支持
IcebergIceberg2.1 支持不支持不支持
PaimonPaimon2.1 支持不支持不支持
HudiHudi2.1 支持不支持不支持
JDBCJDBC2.1 支持不支持不支持
ESES2.1 支持不支持不支持

物化视图和 OLAP 内表关系​

异步物化视图定义 SQL 使用基表的表模型没有限制,可以是明细模型,主键模型(merge-on-write 和 merge-on-read),聚合模型等。

物化视图自身的底层实现依托于 Duplicate 模型的 OLAP 表,这一设计使其理论上能够支持 Duplicate 模型的所有核心功能。然而, 为了保障物化视图能够稳定且高效地执行数据刷新任务,我们对其功能进行了一系列必要的限制。以下是具体的限制内容:

  • 物化视图的分区是基于其基表自动创建和维护的,因此用户不能对物化视图进行分区操作
  • 由于物化视图背后有相关的作业(JOB)需要处理,所以不能使用删除表(DELETE TABLE)或重命名表(RENAME TABLE)的命令来操作物化视图。 相反,需要使用物化视图自身的命令来进行这些操作。
  • 物化视图的列数据类型是根据创建时指定的查询语句自动推导得出的,因此这些数据类型不能被修改。否则,可能会导致物化视图的刷新任务失败。
  • 物化视图具有一些 Duplicate 表没有的属性(property),这些属性需要通过物化视图的命令进行修改。 而其他公用的属性则需要使用 ALTER TABLE 命令进行修改。
http://www.lryc.cn/news/537595.html

相关文章:

  • 图像缩放的双线性插值实现方式
  • 深入剖析 Vue 的响应式原理:构建高效 Web 应用的基石
  • 40.日常算法
  • CAS单点登录(第7版)11.SSO SLO
  • Bob the Canadian
  • CAS单点登录(第7版)16.模仿
  • 预留:大数据Hadoop之——部署hadoop+hive+Mysql环境(Linux)
  • RabbitMQ介绍以及基本使用
  • C++演示中介模式
  • Vue的简单入门 一
  • 【免费送书活动】《MySQL 9从入门到性能优化(视频教学版)》
  • export default与export区别
  • 最佳的出牌方法
  • Kotlin 2.1.0 入门教程(二十一)数据类
  • 30天开发操作系统 第 20 天 -- API
  • WEB安全--SQL注入--floor报错注入
  • 【java面向对象的三大特性】封装、继承和多态
  • Hermite 插值
  • 【推理llm论文精度】DeepSeek-R1:强化学习驱动LLM推理能力飞跃
  • arm linux下的中断处理过程。
  • C语言:指针详解
  • github用户名密码登陆失效了
  • 【删除tomcat默认管理控制台】
  • 动态库与静态库:深入解析与应用
  • 【鱼眼镜头12】Scaramuzza的鱼眼相机模型实操,不依赖于具体的相机几何结构,直接从图像数据出发,因此更具灵活性。
  • LVS 负载均衡集群(NAT模式)
  • MATLAB中的APPdesigner绘制多图问题解析?与逻辑值转成十进制
  • 9种慢慢被淘汰的编程语言...
  • vue知识点5
  • rdiff-backup备份