数仓日常维护:剖析每日增量同步的内部机制

数仓日常维护:剖析每日增量同步的内部机制

一、前言

在现代企业中,离线仓库扮演着不可或缺的角色。它充当着一个数据的中心枢纽,存储和管理着海量的信息。作为企业数据分析、业务决策和预测的基石,离线仓库的重要性不言而喻。

而数据的实时性和准确性对于确保数据仓库的有效性至关重要。而离线数仓中常见的数据同步方式是T+1,其中同步方式主要分为两种:全量同步和增量同步。

本文聚焦于探讨增量同步的原理,解析其工作机制和实现方法。

二、场景

在大数据平台中,业务部门常常需要查看历史某一天的表数据。为了记录历史数据的变化,常见的解决方案包括拉链表和快照表。然而,由于拉链表的实现方式和查询方式较为复杂不便直观的展现问题,因此在这里我选择使用快照表作为示例,以便更清晰地阐述离线数仓的数据一致性问题。

快照表是用来存储某个时间点的所有数据-通常粒度是天,相当于是对每天的业务数据做了一次快照,存储当天的全量数据;例如:快照表12号分区中的数据是从历史到11号的所有数据,13号分区中的数据是从历史到12号的所有数据,其他的以此类推,示例如下:

  1. [Mysql] 业务数据 - 用户表全量数据:
idnamephonegendercreate_timeupdate_time
1jack1112023-06-01 13:00:002023-06-01 13:00:00
2jason2222023-06-01 13:00:002023-06-01 13:00:00
3tom3332023-06-01 13:00:002023-06-01 13:00:00
  1. [数仓]由于离线数仓是T+1处理,故2023-06-02时数仓快照表数据如下:
idnamephonegendercreate_timeupdate_timedt[分区字段]
1jack1112023-06-01 13:00:002023-06-01 13:00:002023-06-01
2jason2222023-06-01 13:00:002023-06-01 13:00:002023-06-01
3tom3332023-06-01 13:00:002023-06-01 13:00:002023-06-01

加粗为分区字段

  1. [Mysql] 2023-06-02 业务数据新增了一名用户,且更改了tom的手机号,此时表数据如下:
idnamephonegendercreate_timeupdate_time
1jack1112023-06-01 13:00:002023-06-01 13:00:00
2jason2222023-06-01 13:00:002023-06-01 13:00:00
3tom4442023-06-01 13:00:002023-06-02 09:00:00
4tony5552023-06-02 10:00:002023-06-02 10:00:00

加粗为更新/新增数据

  1. [数仓]由于离线数仓是T+1处理,故2023-06-03时数仓快照表数据如下:
idnamephonegendercreate_timeupdate_timedt[分区字段]
1jack1112023-06-01 13:00:002023-06-01 13:00:002023-06-01
2jason2222023-06-01 13:00:002023-06-01 13:00:002023-06-01
3tom3332023-06-01 13:00:002023-06-01 13:00:002023-06-01
1jack1112023-06-01 13:00:002023-06-01 13:00:002023-06-02
2jason2222023-06-01 13:00:002023-06-01 13:00:002023-06-02
3tom4442023-06-01 13:00:002023-06-02 09:00:002023-06-02
4tony5552023-06-02 10:00:002023-06-02 10:00:002023-06-02

加粗为更新/新增数据

以上是快照表的表现形式,具体实现方式如下

三、实现

3.1、全量同步

全量同步顾名思义是将业务数据用户表全量同步一份到数仓快照表中的指定分区内,该方式简单粗暴,这里以:2.1、示例中的 2023-06-02业务数据新增了一名用户,且更改了tom的手机号为例;过程如下:

在这里插入图片描述

  • sql语句:
# 2023-06-03凌晨执行的全量同步sql语句
INSERT INTO 数仓快照表 PARTITION (date='2023-06-02')
select * from 业务用户表 where update_time < '2023-06-03 00:00:00';

3.2、增量同步

增量同步顾名思义是将业务数据用户表按天为粒度将增量数据与数仓快照表中的前一天数据进行join对比后放入到指定分区内,该方式需要业务数据有唯一字段(常用ID) 和 update_time时间戳,否则无法使用增量同步,这里以:2.1、中示例,实现原理如下:

  1. 提取业务表中的2023-06-02日的增量数据

在这里插入图片描述

  1. 通过上一步获得到的增量数据与数仓2023-06-01分区数据进行 left join 及判空提取出未更改的数据后再与增量数据union结合得到最新数据

在这里插入图片描述

  1. 将上一步获取到的最新数据插入至数仓快照表中的2023-06-02分区,全流程如下:

在这里插入图片描述

  1. 所有sql操作如下:
-- 通过以下sql提取出业务表中的增量数据
select * from 业务用户表 where 
update_time >=  '2023-06-02 00:00:00' and update_time < '2023-06-03 00:00:00';

-- 通过与数仓2023-06-01分区数据进行left join 及判空提取出未更改的数据后再与增量数据union结合得到最新数据
SELECT 数仓快照表.*  
FROM `数仓快照表` LEFT JOIN 增量数据表 ON 数仓快照表.id = 增量数据表 .id 
WHERE 增量数据表 .id IS NOT NULL 
UNION 
SELECT 增量数据表 .* 
FROM `增量数据表 `

-- 将业务数据导入 至 数仓快照表2023-06-02目标分区中
INSERT INTO 数仓快照表 PARTITION (date='2023-06-02') 
SELECT 数仓快照表.*  
FROM `数仓快照表` LEFT JOIN 增量数据表 ON 数仓快照表.id = 增量数据表 .id 
WHERE 增量数据表 .id IS NOT NULL 
UNION 
SELECT 增量数据表 .* 
FROM `增量数据表 `

四、总结

增量同步方式是一种数据同步的方式,其优势在于只提取业务数据中发生变化的部分,即增量数据集。相对于全量同步,这种方式能够带来诸多优势,其中包括以下几点:

  1. 降低对业务数据库的压力
    • 增量同步只传输发生变化的数据部分,避免了每次同步都需要传输整个数据集的情况,从而减轻了业务数据库的负担和网络带宽的压力。
  2. 节省时间和资源
    • 由于只处理数据的增量变化,相比全量同步,增量同步可以更快速地完成同步过程,节省了处理时间和资源。
  3. 减少同步错误和数据冲突
    • 在增量同步中,仅处理发生变化的数据,减少了数据同步过程中可能出现的错误和冲突,提高了数据同步的准确性和可靠性。
  4. 提高同步效率和性能
    • 由于只关注变化的数据,增量同步能够更精准地捕获变更,从而提高了同步效率和性能,减少了不必要的重复同步和数据传输。

综上所述,增量同步方式通过只同步业务数据中的变化部分,相比全量同步,能够有效降低对业务数据库的负荷,节省时间和资源,减少同步错误和冲突,以及提高同步效率和性能。这种方式是数据同步过程中常用的有效策略之一,有助于提升数据同步的效率和可靠性。

五、相关文档

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要想在百度八亿网页的数据海洋中找到你所要的信息, 人工方式需要1200 多人年,而百度搜索技术不到1 秒钟。人 们被数据淹没,却渴望知识。商务智能技术已成为当今企业 获取竞争优势的源泉之一。商务智能通常被理解为将企业中 现有的数据转化为知识,帮助企业做出明智决策的IT工具集。 其中数据仓库、OLAP和数据挖掘技术是商务智能的重要组成 部分。商务智能的关键在于如何从众多来自不同企业运作系 统的数据中,提取有用数据,进行清理以保证数据的正确性, 然后经过抽取、转换、装载合并到一个企业级的数据仓库里, 从而得到企业数据的一个全局视图,并在此基础上利用适当 的查询分析、数据挖掘、OLAP等技术工具对其进行分析处理, 最终将知识呈现给管理者,为管理者的决策过程提供支持。 可见,数据仓库技术是商业智能系统的基础,在智能系统开 发过程中,星型模式设计又是数据仓库设计的基本概念之一。 星型模式是由位于中央的事实表和环绕在四周的维度表 组成的,事实表中的每一行与每个维度表的多行建立关系, 查询结果是通过将一个或者多个维度表与事实表结合之后产 生的,因此每一个维度表和事实表都有一个“一对多”的连 接关系,维度表的主键是事实表中的外键。随着企业交易量 的越来越多,星型模式中的事实表数据记录行数会不断增加, 而且交易数据一旦生成历史是不能改变的,即便不得不变动, 如对发现以前的错误数字做修改,这些修改后的数据也会作 为一行新纪录添加到事实表中。与事实表总是不断增加记录 的行数不同,维度表的变化不仅是增加记录的行数,而且据 需求不同维度表属性本身也会发生变化。本文着重讨论数据 仓库维度表的变化类型及其更新技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Light Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值