前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一种基于分区列谓词补偿的物化视图增量更新方法

一种基于分区列谓词补偿的物化视图增量更新方法

原创
作者头像
jhonye
发布于 2023-03-03 02:04:05
发布于 2023-03-03 02:04:05
1K0
举报
文章被收录于专栏:随手写个文章随手写个文章

背景

当前业界在做物化视图增量更新时,物化视图一般会存储在一张分区表中,以分区为粒度进行增量、刷新、删除;不然就需要生成大量的物化视图元数据或每次都要重新计算历史所有的物化数据,成本是巨大的。上述物化视图的增量为基础表数据append增加新分区,刷新为先删除后增加,删除即删除对应的分区;当前的物化视图分区表不允许有空洞,否则会导致物化视图无法命中;其他一致性问题见物化视图一致性问题

增量物化视图的分区表是一张物理表,每次进行增量构建时,会先将数据计算好后追加load到新的分区,然后再 commit 元数据,会存在一段时间的中间状态;那么在改写用户sql时,根据当前的业界普遍的物化视图改写规则,就可能会把新分区的数据计算进去,导致数据不一致。存在一种方案是生成一张映射表,改写用户sql的时候访问映射表,映射表只会映射ready分区的数据。本文提供另一种基于谓词补偿的方法,来解决该问题。

原理

如上图[2022-01-01, 2022-01-05)是物化视图有效分区,2022-01-05这个分区在进行构建,此时物化视图如果还支持改写用户sql的话,那么可能会出现有一部分数据已经写入到2022-01-05分区,此时改写后的sql是扫描了物化视图中全部分区的数据,则数据不一致。

如上图为其中给一个解决方案,就算此时有一部分数据写入到了2022-01-05,但是命中的物化视图对应的是关联映射的表,物化视图有效分区还是[2022-01-01, 2022-01-05),2022-01-05映射的存储数据为空,读不到真实存储中的2022-01-05分区,所以此时数据一致。

谓词补偿

Q:如果不用上面的解决方案,我们是否还可以通过其他方式解决?

A:改写物化视图时,进行谓词补偿,即无论是否精确改写,都把WHERE 分区范围补充上。

在不能精确改写时,即物化视图的分区范围为 [2022-01-01, 2022-01-05),如果查询的sql取范围 [2022-01-02, 2022-01-05),则命中物化视图的部分会被改写为 SELECT * FROM mv WHERE dt >= 2022-01-02 。

精确改写时,即sql查询的范围为[2022-01-01, 2022-01-05) 改写后的sql为 SELECT * FROM mv 。

如果精确改写后的sql为 SELECT * FROM mv WHERE dt >= 2022-01-01 and dt < 2022-01-05 ,非精确改写后的sql为SELECT * FROM mv WHERE dt >= 2022-01-02 and dt < 2022-01-05,那么则不会扫描到有效分区外的数据,即只有最后元数据的更新,数据才可以被扫描,就可以保证数据一致性。即补偿谓词 dt >= 2022-01-01 和 dt < 2022-01-05 。

Q:为什么开源代码不直接做谓词补偿 ?

A:谓词补偿可能导致数据的重复计算,因为开源逻辑做的更加泛化,需要适用更多场景;例如原来已经判断过条件 name = 'jhon',增加谓词补偿后,每行数据又要判断一次name='jhon'。

Q:为什么我们要做谓词补偿?

A:因为我们进行谓词补偿的列为分区列,不需要重复计算,可以直接扫描。

Q:谓词补偿在更新历史物化视图时会有问题吗?

A: 如果用户需要刷新历史已经物化过的分区,因为只有一份存储,所以只能先下线从开始到更新的部分或者从更新部分到最后已经ready的分区,等更新完成后,再恢复。且用户在更新物化视图时,已经将查询sql促发,可能会导致该sql会扫描到在更新分区的数据。

结论

从上述说明中,我们可以发现通过指定物化视图的分区列做谓词补偿,可以解决在物化视图增量过程中的大多数问题。当然使用映射表也是一个好方案,目前业界的很多框架也是使用该设计,例如kylin的segment。

Reference

https://github.com/apache/hive/blob/6f7c55ab9bc4fd7c3d0c2a6ba3095275b17b3d2d/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/views/HiveMaterializedViewRule.java

https://github.com/apache/calcite/blob/b9c2099ea92a575084b55a206efc5dd341c0df62/core/src/main/java/org/apache/calcite/rel/rules/materialize/MaterializedViewRule.java

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
悄悄学习Doris,偷偷惊艳所有人 | Apache Doris四万字小总结
DorisDB是由Apache Doris核心研发团队打造的新一代企业级MPP数据库。它继承了Apache Doris项目十多年研发成果,累积了线上数千台服务器稳定运行经验,并在此基础上,对传统MPP数据库进行了开创性的革新。
王知无-import_bigdata
2021/09/22
7.8K1
基于catalyst的物化视图改写引擎的实现
更新日志: 1. 2020/06/16 group by 视图的部分描述错误,已修正。
用户2936994
2022/04/07
7190
Calcite系列(十一):物化视图
物化视图(Materialized View):是一种特殊的物理表,本质是预计算,是多个计算过程之间的联系建立。从数据组织层面优化数据访问效率,即把某些耗时的操作(例如JOIN、AGGREGATE)的结果保存到物理存储上,可以像表一样被访问,以便在后续查询时直接复用,最终达到加速查询的目的,即空间换时间。而普通视图(View)仅是简化用户的查询定义,不存储实际结果数据。
Yiwenwu
2024/04/24
8740
Apache Paimon核心原理和Flink应用进阶
这是一篇较为完整的介绍Apache Paimon和Flink进阶应用的文章,你最好收藏一波。
王知无-import_bigdata
2023/12/12
2.2K0
Apache Paimon核心原理和Flink应用进阶
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
在当今这个数据洪流的信息时代下,数据已跃升为企业不可或缺的核心资产。深度挖掘并提炼数据内在价值,成为支撑企业战略决策的重要依据。在此背景下,快手建立了 OLAP 系统,该系统在快手应用极为广泛,每天承载近 10 亿的查询请求,为内外多个业务场景提供数据服务。具体场景包括:
SelectDB技术团队
2024/09/27
3830
应用实践|Apache Doris物化视图与索引在京东的典型应用
导读:本文分享关于 Doris 的实际使用情况,主要是物化视图、索引的典型应用案例,以及在使用 Doris 过程中的一些心得。
从大数据到人工智能
2022/05/26
1.2K0
应用实践|Apache Doris物化视图与索引在京东的典型应用
​深入浅出 ClickHouse 物化视图
数据库查询语言(query language)是数据库管理系统(DBMS)提供给用户和数据库交互的工具,查询语言分为三类 [^1]:
腾讯技术工程官方号
2023/07/15
2.6K0
​深入浅出 ClickHouse 物化视图
ClickHouse物化视图在微信的实战经验
ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提供稳定高效的查询服务。
Vitamin_C
2021/06/08
5K1
ClickHouse物化视图在微信的实战经验
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
在现代化的数据分析场景中,数据量以指数级速度快速膨胀,分析维度在不断扩展,查询逻辑的复杂度也在日益增加。从性能角度考虑,在承担高并发查询的压力下,秒级别甚至更快的响应速度已成为基本需求。同时,面对有限的计算资源,成本及性能如何平衡,严格的资源管控也显得尤为重要。
SelectDB技术团队
2024/11/20
2710
Krypton:字节跳动新一代实时服务分析 SQL 引擎设计 | VLDB 2023 论文解读
近些年, 在复杂的分析需求之外,字节内部的业务对于实时数据的在线服务能力也提出了更高的要求。大部分业务不得不采用多套系统来应对不同的 Workload,虽然能满足需求,但也带来了不同系统数据一致性的问题,多个系统之间的 ETL 也浪费了大量的资源, 同时对于研发人员来讲,也不得不学习维护多套系统。为了解决这个问题,我们开启了 Krypton 项目,这是字节跳动基础架构计算-实时引擎、 创新应用中心、 存储-HDFS & NoSQL 团队共同合作研发的新一代面向复杂业务的实时服务分析系统(HSAP: Hybrid Serving and Analytical Processing),希望能在应对大数据复杂分析场景的同时,也能满足业务对于实时数据在线服务的需求。
深度学习与Python
2023/09/08
8780
Krypton:字节跳动新一代实时服务分析 SQL 引擎设计 | VLDB 2023 论文解读
大数据架构系列:预计算场景的数据一致性问题
结合 Wikipedia 和业界一些数据(仓)库产品对物化视图的定义,简单说明:物化视图是原始数据某个时刻快照的预计算结果,其中原始数据一般为表或者多张表的join,预计算过程一般是较为简单的sql查询,结果一般都会存储到新的表。可以将物化视图的生成过程抽象为Source、Transform、Sink,数据可以落地到Hdfs、Cos、Clickhouse、kudu等,用来减少数据的重复计算;另外某些场景需要在极短的时间内进行响应,如果直接查询原始数据,一般无法达到业务的需求,预计算后速度可以大大提升;在某些场景下物化视图也是数据资产,例如Cube(维度建模、kylin的概念)代表的业务模型,有时为了节省存储成本,只保留物化视图。
jhonye
2022/11/21
1.1K0
TiFlink:使用 TiKV 和 Flink 实现强一致的物化视图丨TiDB Hackathon 项目分享
本文为 TiDB Hackathon 2020 比赛中 TiFlink 项目最新进展的介绍,使用 TiKV 和 Flink 实现了强一致的物化视图的功能。
PingCAP
2021/10/28
9020
物化视图相关的性能改进 (r7笔记第58天)
今天早上开发的一个同事找到我说他早上做了一个统计查询,但是感觉速度很慢,已经过了一个小时了还没有反应。想让我看看是什么情况。 我通过v$session查到有一个会话确实已经持续了近一个小时,查看sql语句是一个create table select * from xxx这样格式的语句。也就是通过关联查询创建出一个所谓的临时表来。 语句如下: create table APP_BI_ENCRYPT_QUERY.t_result_1312 as select t1.SECURITY_PHONE as MOB
jeanron100
2018/03/16
6470
数据无界、湖仓无界,Apache Doris 湖仓一体典型场景实战指南(下篇)
在数据驱动决策的时代,湖仓一体架构以统一存储、统一计算、统一管理的创新形式,补齐了传统数据仓库和数据湖的短板,逐步成为企业大数据解决方案新的标准。
SelectDB技术团队
2025/02/21
2630
B站基于Hudi+Flink打造流式数据湖的落地实践
上图展示了当前B站实时数仓的一个简略架构,大致可以分为采集传输层、数据处理层,以及最终的AI和BI应用层。为保证稳定性,数据处理层是由以实时为主,以离线兜底的两条链路组成,即我们熟知的批流双链路。
ApacheHudi
2023/09/04
1.3K0
B站基于Hudi+Flink打造流式数据湖的落地实践
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
公众号:码到三十五
2024/05/24
6.9K0
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
滴滴OLAP的技术实践与发展方向
导读本次分享题目为StarRocks物化视图在滴滴的实践,由来自滴滴出行的资深开发工程师刘雨飞老师带来经验分享。
ApacheHudi
2024/02/06
3800
滴滴OLAP的技术实践与发展方向
当数据工程师遇上"Doris魔法视图",性能飞升的背后藏着什么?
凌晨,数据工程师小红正对着一堆复杂的查询语句发愁。复杂的多表JOIN、层层嵌套的聚合计算,让查询性能迟迟得不到提升。这时,他突然想到了Doris 2.1版本中发布的多表异步物化视图功能..."
一臻数据
2024/12/24
930
当数据工程师遇上"Doris魔法视图",性能飞升的背后藏着什么?
Apache Doris 3.0 里程碑版本|存算分离架构升级、湖仓一体再进化
亲爱的社区小伙伴们,我们很高兴地向大家宣布,在近期我们迎来了 Apache Doris 3.0 版本的正式发布,欢迎大家下载使用体验!
SelectDB技术团队
2024/10/16
2340
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
深夜凌晨两点,数据工程师小张还在加班处理各种复杂的数据分析需求。"这个查询速度也太慢了,都等了半天了还没出结果..." 他揉了揉疲惫的双眼,忍不住吐槽。这不,又收到产品经理的"红色感叹号"消息:"那个实时大屏怎么又卡住了?"
一臻数据
2024/12/24
700
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
推荐阅读
相关推荐
悄悄学习Doris,偷偷惊艳所有人 | Apache Doris四万字小总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档