数据仓库:如何解决ODS数据零点漂移问题
本篇文章讲解的是从业务库同步数据至数仓导致的零点漂移,查看flume+kafka同步数据导致的零点漂移参考该文章:业务数据采集_零点漂移处理方法(Flume+Kafka+HDFS)
一、数据零点漂移概念
1、什么是零点漂移:
数据零点漂移指的是数据同步过程中,ODS表按时间字段分区时,同一个业务日期(分区)
包含前一天的数据或丢失了当天的数据、或者包含后一天凌晨附近的数据。
由于ODS需要承接面向历史的细节数据查询需求,这就需要物理落地到数据仓库的ODS表按时间段来切分进行分区存储,通常的做法是按某些时间戳字段来切分,而实际上往往由于时间戳字段的准确性问题导致发生数据漂移。
1)这里讲的漂移是指ODS表按照某个字段分区会存在数据漂移现象,如果是全量抽取数据数据会存在该问题吗?全量抽取是否是延迟零点过几分去执行抽取?
2)目前小公司ods数据同步方式都是全量抽取的方式、因为数据量小。
2、为什么会产生数据漂移
当数仓ODS采用按时间段分区的方式存储数据,时间字段的选择会导致不同类型的数据漂移现象。
2.1、分区时间字段分类
通常,时间戳字段分为四类:
- 数据库表中用来标识数据记录更新时间的时间戳字段(modified_time)
- 数据库日志中用来标识数据记录更新时间的时间戳字段·(log_time)
- 数据库表中用来记录具体业务过程发生时间的时间戳字段(proc_time)
- 标识数据记录被抽取到时间的时间戳字段(extract_time)
理论上,上述四个时间戳应该是一致的,即proc_time = log_time = modified_time = extract_time,但实际生产中,这几个时间往往会出现差异。
2.2、分区时间大小关系
在现实中,四个时间戳的大小关系为:proc_time<log_time<modified_time<extract_time,造成这些差异的原因有:
- 由于数据产生后才能抽数,并且很难做到数据实时产生实时抽取,所以extract_time一般会晚于其他三个时间。
- 关系型数据库采用预写日志方式来更新数据,所以更新时间modified_time会晚于log_time
- 由于网络或系统压力问题,会导致数据延迟写入/数据延迟更新。log_time或者modified_time会晚于proc_time
- 前台业务系统手工修正数据时,未更新modified_time
2.3、不同的时间字段分区产生的问题
根据其中的某一个时间字段来切分ODS表,这就导致产生数据漂移。下面我们来具体看下数据漂移的几种场景。
- 根据extract_time抽取时间分区,这种情况数据漂移的问题最明显。
- 根据modified_time更新时间分区。在实际生产中这种情况最常见,但是往往会发生不更新modified_time而导致的数据遗漏,或者凌晨时间产生的数据记录漂移到后一天。
- 根据log_time分区。由于网络或者系统压力问题,log_time会晚于proc_time,从而导致凌晨时间产生的数据记录漂移到后一天。
例如,在淘宝“双11”大促期间凌晨时间产生的数据量非常大,用户支付需要调用多个接口,从而导致log_time晚于实际的支付时间。 - 根据proc_time业务过程分区。仅仅根据proc_time限制,我们所获取的ODS表只是包含一个业务过程所产生的记录,会遗漏很多其他过程的变化记录。
二、如何解决零点漂移
1、多获取后一天的数据
既然很难解决数据漂移的问题,那么就在ODS每个时间分区中向后多冗余一些数据,
在ods每个时间分区中向后多冗余一天数据,保障数据只会多,不会少,而具体的数据切分让下游根据自身不同的业务场景用不同的业务时间proc_time来限制。
但这种方式会有一些数据误差,因为后一天的数据可能已经更新多次,直接获取到的那条记录已经是更新多次后的状态了。
2、多个时间戳字段限制时间
通过多个时间戳字段限制时间,来获取相对准确的数据
- ①获取当天漂移的数据:根据modified_time获取后一天15分钟的数据,并限制多个和业务过程的时间戳为当天,然后根据这些数据按照modified_time升序排序,获取每个数据(主键唯一)首次数据变更的那条记录。
- ②获取当天未漂移的数据并剔除前一天漂移过来的数据:根据log_time分别冗余前一天最后15分钟的数据和后一天凌晨开始15分钟的数据,并用modified_time过滤非当天数据,并针对每个订单按照log_time进行降序排序,取每个订单当天最后一次数据变更的那条记录。
- ③将两部分数据根据订单做full join 全外连接,即可得到当天所有数据。
总而言之,在生产中数据漂移问题是存在的,我们只能通过一些规则限制获取相对准确的数据。比如约定通过修改时间来分区、这个字段如果存在不更新的情况就需要业务系统治理。
哎呀,写了这么多觉得对数据零点漂移还是没理解透彻~~~~~~慢慢完善
1)如果是动态分区如何处理?
2)如果是增量同步、新增及变化、全量同步的数据零点漂移如何处理?
三、数据零点漂移面试讲解
1、数据零点漂移指的是,ODS表按照时间字段分区时、同一个业务日期(分区)包含前一天的数据或丢失了当天的数据、或者包含后一天凌晨附近的数据。
2、导致的原因是:时间字段不更新;或者分区时间与业务实际发生时间有差异,比如凌晨时间产生的数据、时间记录漂移到了后一天(业务数据更新的原因)。
3、产生的影响:数据业绩计算不准确,当天数据漂移到了第二天
4、解决方法(数据漂移的问题很难解决,只能通过一些规则来获取相对准确的数据):
1)系统侧:约束修改时间、日志记录修改时间必须更新
2)全量同步数据时,凌晨过几分去拉取数据
3)ODS根据时间字段分区时
- 每个分区多获取后一天的数据进行数据冗余,下游使用数据时在根据业务时间字段限制
- 通过多个时间戳字段限制时间
参考文章:
1、如何解决数据漂移问题
2、【数据仓库】数据漂移的处理
数据仓库:如何解决ODS数据零点漂移问题相关推荐
- 采集数据零点漂移问题解析
为什么会发生零点漂移? 比如2021-10-10 23:59:59生成的日志文件,然后数据经过第一层的flume采集,加上kafka的缓冲,然后到 集群的另一台上的第二层的flume的时候,时间肯定就 ...
- 业务数据采集_零点漂移处理方法(Flume+Kafka+HDFS)
最近做了一个业务数据采集,总体架构就是 Flume-taildir source + kafka channel => Kafka => Flume-kafka source + memo ...
- 二元一次方程式解决零点漂移
今天看到同事写的一个算法,在这里和大家分享一下: 针对压力传感器的零点漂移,AD采样值在零点附近来回波动,这样的AD值根本没办法使用,但是如果直接限制幅度,会造成正压起始点和负压起始点抬高,又要显示从 ...
- Flume实战-解决零点漂移-时间戳拦截器
对于日志,flume sink写入HDFS时,如果按照时间生成文件,在没有明确指定时间的情况下,会读取服务器时间作为创建文件的依据,这会导致日志的实际生成日期与文件不符. 这种情况下,可以通过拦截器在 ...
- 数据仓库DW、ODS、DM概念及其区别
数据仓库DW.ODS.DM概念及其区别 一.整体结构 在具体分析数据仓库之前先看下一下数据中心的整体架构以及数据流向 数据中心整体架构 DB 是现有的数据来源(也称各个系统的元数据),可以为mysql ...
- 数据仓库—stg层_数据产品-数据仓库分层建模
说下自己的理解: 数据仓库是分层的,通常情况下都是进行三层建模(当然也不是绝对的). 例如上次说的商品订单数据表,表字段可能有非常多个,但是我们使用的时候可能只用到UID,PayTime,Create ...
- 压力传感器零点漂移与零点漂移补偿
压力传感器零点漂移是指在规定的测试条件下,当输入压力为零时,输出值随时间正向.负向或上.下跳动超过规定指标.为了防潮.防雨水.防有害气体的侵蚀,压力传感器的电路板是按密封结构设计和制造的.如果没有把表 ...
- 数据仓库DW、ODS、DM及其区别总结
一.基本概念 DW 数据仓库(Data Warehouse):是一个面向主题的(Subject Oriented).集成的(Integrated).相对稳定的(Non-Volatile).反映历史变化 ...
- channelinboundhandler中都包含了哪一类的方法_数据仓库、数据集市、数据湖、数据中台到底有什么区别?都得做吗?...
点击上方蓝字关注数据玩家 经常看到有人问这个问题,数据玩家也看过很多解释,感觉都不够直观,这里,我尝试用一个大家都理解的例子来说明. 什么是数据仓库? 大家都去宜家买过东西吧,还记得一楼的大仓库不,你 ...
最新文章
- 面向对象的三大特性之继承
- 利用CloudIDE当做简单linux环境,执行简单python工程任务
- linux/unix系统编程手册下载,Linux/UNIX系统编程手册(pdf+epub+mobi+txt+azw3)
- jvm:RunTimeDataArea
- 有关private T
- 仪表自动识别方法汇总
- pyqt5标签中的字设置不同字体_PyQt5 控件字体样式等设置的实现
- 【“计算机科学与技术”专业小白成长系列】计算机科学与技术主要学什么?
- 基于微信小程序的民宿酒店预订系统
- C++:关于保留小数和保留有效数字。
- java对excel的操作
- 区块链:P2P技术是什么
- 什么是Pytest及Pytest常用方法
- 软件开发公司的提成制度【修订中】
- codefoces 1072 D Minimum path dp+bfs (zls一眼题
- war3改键精灵脱壳去广告
- Microsoft Office
- JavaScript前端代码规范
- 林左鸣 史瑞华:人类应鼎力进行的探索
- Favourite Blogger Lightroom Presets是一套内含15款lightroom预设的时尚博客调色效果lr预设。这些博客调色效果Lr预设适用于肖像摄影,生活摄影,创意摄影,旅游
热门文章
- NOR falsh、NAND flash、SDEMMC、QSPI flash、SPI flash
- C语言常用词汇(2)
- navigation固定路线操作指南
- containerd 配置镜像仓库完全攻略
- 02.07Center Alignment居中对齐
- 【历史上的今天】10 月 13 日:网景浏览器诞生;ENIAC 首席设计师出生;全球首例全机器人手术
- ajax洗衣液有几种,羽绒服弄脏难洗?用这4种“去污水”,比洗衣液好用多了!...
- 海康摄像头的一些问题
- 详解:Flutter内存泄漏解决方案
- 安装Android studio时遇到的问题