首页 > 其他分享 > 数仓知识07:数据增量更新的几种方式

数仓知识07:数据增量更新的几种方式

时间:2023-07-18 17:34:32浏览次数:36  
标签:数仓 抽取 07 源头 表中 增量 日志 数据

数仓知识07:数据增量更新的几种方式 1、增量更新的几种方式 增量更新的本质,其实是获取源表中数据变化的情况(增、删、改),然后将源表中发生的变化同步至目标表中。 不同的方式,获取源表中数据变化的情况不一样,受技术的限制、表结构的限制,某些方式可能无法获取到完整的数据变化情况,因此只能适用于特定的场景。 方式 简述 适用场景 详述 优点 缺点 时间戳增量1 记录每次读数完成时的最大时间戳,后续读数时只获取源头表中新增的数据,将其增量写入到目标表。 源表只增不删不改 源表有时间戳标记新增的数据 第一次从源头表读取数据的动作完成之后,记录一下时间戳字段中最大的时间点,保存到一个记录表中。 第二次从源头表读取数据之前,先获取记录表中最后/最大的时间点,只读取源表中这个时间点以后的数据。 当加载过程全部成功完成之后再更新加载记录表,更新这次最后的时间点。 性能好 不能捕获删除和变化的数据 部分源头表无时间戳字段 时间戳增量2 通过时间戳获取源头表新增和修改的数据,然后将其写入到目标表。 源表只增、改,不删 源表有时间戳标记新增和变化的数据 从源头表首次完成取数后,记录最大的 UpdateDate 时间戳,保存到一个记录表中。 第二次读数时,用记录表中的时间戳与源表里的 UpdateDate 时间戳相比较,比时间戳大的说明是源头表中新添加的或者修改的数据。对这部分数据进行取数。 从源头表取数完成后,更新最大的 UpdateDate到记录表中。 后续取数的逻辑,以此类推。 增量抽取时,抽取进程通过比较上次存档的时间与抽取源表的时间戳字段的值来决定抽取哪些数据。这种方式需要在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。 有的数据库(例如Sql Server)的时间戳支持自动更新,即表的其它字段的数据发生改变时,时间戳字段的值会被自动更新为记录改变的时刻。在这种情况下,进行ETL实施时就只需要在源表加上时间戳字段就可以了。对于不支持时间戳自动更新的数据库,这就要求业务系统在更新业务数据时,通过编程的方式手工更新时间戳字段。 使用时间戳方式可以正常捕获源表的插入和更新操作,但对于删除操作则无能为力,需要结合其它机制才能完成。 性能尚可,能够获取改动的源头数据 不能捕获删除的数据 部分源头表无时间戳字段 触发器 为抽取的表建立触发器,一般要建立插入、修改、删除三个触发器,源头表的数据发生变化时,触发器将变化的数据写入临时表,抽取线程再从临时表中抽取数据。 所有场景 该方式是根据抽取要求,在要被抽取的源表上建立插入、修改、删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表,ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除。 为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称、更新的关键字值和更新操作类型(insert、update或delete),ETL增量抽取进程首先根据源表名称和更新的关键字值,从源表中提取对应的完整记录,再根据更新操作类型,对目标表进行相应的处理。 性能好 覆盖场景全面 成本高,需要建触发器 全表对比(MD5) 为源头表建立一个结构类似的MD5临时表,每次抽数时对源头表和MD5临时表进行MD5校验码比对,从而决定源头表中的数据是新增、修改还是删除,同时更新MD5校验码。 所有场景 全表比对即在增量抽取时,ETL进程逐条比较源表和目标表的记录,将新增和修改的记录读取出来。 优化之后的全表比对方式是采用MD5校验码,需要事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表的主键值以及根据源表所有字段的数据计算出来的MD5校验码,每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,如有不同,进行update操作:如目标表没有存在该主键值,表示该记录还没有,则进行insert操作。然后,还需要对在源表中已不存在而目标表仍保留的主键值,执行delete操作。 覆盖场景全面 需要全表对比,性能差 全表对比(指定字段) 对比目标表和源头表的几个关键字段,获取源头表和目标表不一致的数据,然后增量写入到目标库。 所有场景 由用户来选择几个字段,可以作为唯一标识。 每次抽数时,对比一下源头表和目标表中这几个字段的差异,来判定表中数据是否存在增、删、改的情况。 将源头表变化的数据同步至目标表中。 覆盖场景全面 需要对比大量字段,性能差 分析日志 通过分析数据库自身的日志来判断变化的数据。 所有场景 该方式通过分析数据库自身的日志来判断变化的数据。关系型数据库系统都会将所有的DML操作存储在日志文件中,以实现数据库的备份和还原功能。ETL增量抽取进程通过对数据库的日志进行分析,提取对相关源表在特定时间后发生的DML操作信息,就可以得知自上次抽取时刻以来该表的数据变化情况,从而指导增量抽取动作。 有些数据库系统提供了访问日志的专用的程序包(例如Oracle的LogMiner),使数据库日志的分析工作得到大大简化。 性能好 数据库权限问题,未必能够提供日志分析权限 2、各种方式的差异排序 按同步性能由高到低排序依次为: 时间戳 > 日志解析 > 触发器 > 全表比对 按配置复杂由低到高排序依次为: 全表比对 <日志解析 < 触发器 < 时间戳 按易维护性由高到低排序依次为: 触发器 > 日志解析 > 时间戳 > 全表比对 按系统影响由低到高排序依次为:日志解析 < 时间戳 < 全表比对 < 触发器 备注:基于目前研究的结果,增量更新仅适用于明细数据的读写场景,不适用于包含单表计算、多表关联的场景,原因是获取的数据并不是全量数据。 ———————————————— 版权声明:本文为CSDN博主「维克先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_42009408/article/details/124528216

标签:数仓,抽取,07,源头,表中,增量,日志,数据
From: https://www.cnblogs.com/mengbin0546/p/17563608.html

相关文章

  • Day11(2023.07.18)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  改文件11:30--13:00   吃饭休息13:00 创建项目,熟悉软件,生成报告等..17:00      下班......
  • C++学生健康信息收集系统[2023-07-18]
    C++学生健康信息收集系统[2023-07-18]学生健康信息收集系统简介一、 问题描述为了应对新型冠状病毒疫情,学校需要开发一个能够每天收集全校学生健康信息的系统,便于学校管理。不同学院以及学校的管理员,需要能方便地查看和导出健康状况异常的学生列表,并能对各类信息进行查看和统计......
  • C/C++用电管理数据[2023-07-18]
    C/C++用电管理数据[2023-07-18]用visualstudioc++设计一款程序来统计用电管理数据,要求能用菜单实现如下功能:(1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。(3)按作者的用电量,从高到低排出每个用户的总用电量。(3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。......
  • C++语言程序设计任务书[2023-07-18]
    C++语言程序设计任务书[2023-07-18]C++语言程序设计任务书指导老师:李力课程编号:一、学时与学分学时:40学分:2二、实践目的计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。三、......
  • 画图板[2023-07-18]
    画图板[2023-07-18]画图板简介一、 问题描述实现了画图板功能,可以使用铅笔自由绘制,以及绘制直线,矩形,椭圆,正方形,圆形等多种图形,还可以支持橡皮擦功能、变换画笔和填充颜色、变换画笔粗细等。此外,也可以方便打开,保存用户所画的图形。二、 功能要求:绘制图形:能够实现在画图板上......
  • Qt实现学生成绩管理系统[2023-07-18]
    Qt实现学生成绩管理系统[2023-07-18]包括登陆用户识别判定(学生登陆只能查询成绩,而管理员登陆可以查询、修改、删除、增添成绩)学生成绩的录入(学生姓名、学生学号、学生专业、学生班级、学生成绩)学生成绩的查找、筛选、排序(特定查找个人、成绩从高到低显示、小于六十分的不及格筛......
  • 107.继承总结
    107.继承总结1.概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称子类或者派生类,被继承的类称为父类或基类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过......
  • C/C++文件加密解密[2023-07-18]
    C/C++文件加密解密[2023-07-18]题目27:文件加密文件的传输会有明文和密文的区别,明文发送是不安全的,用一个程序实现发送文件的加密和解密操作。加密算法,密钥设计由同学自己选择现有的加密解密算法或是自己设计。要求:(1)对文件的字符根据加密算法,实现文件加密。(2)对操作给出必......
  • C/C++学生成绩管理系统[2023-07-18]
    C/C++学生成绩管理系统[2023-07-18]学生成绩管理系统开发一个可以管理学生成绩以及学生基本信息的一个信息系统,至少实现如下功能:信息管理,支持信息的增、删、改、查操作,具体信息类型如下:(1) 管理学生信息 ,包括学号,姓名,年龄,班级等等信息。(2) 班级信息,包括班级编号、班级人数,......
  • C/C++电影评分系统[2023-07-18]
    C/C++电影评分系统[2023-07-18]程序设计综合课程设计指导书一、题目:电影评分系统二、设计内容及要求:根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能。本系统要求模拟实现电影评分系统,其中包括电影资源......