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

数据研发基础| 什么是数据漂移

今天上午被一个昨天就出现的bug硬控一早上,同事a昨天找我说一条数据没同步过来,查出来是因为没审批记录,当脏数据处理掉了。然后他昨天提交了几条测试数据,今天早上来查还是没有。就在群里@我问原因了(还艾特了我的主管,ohno)我赶忙拉着开发同学一起查,发现业务库是今早晨七点更新的,数据是凌晨同步当然同步不过来。

但是这样数据就变成T+2更新了。作为一个小菜鸡,我马上去请教了师兄,他告诉我可以配置二次调度,早上把这个链路的表再run一遍。嗯,今天又从bug中学到了一些处理方案!

所以今天回顾一下数仓中的数据飘移。

什么是数据漂移

通常是指ods表的同一个业务日期数据中包含了前一天或后一天凌晨附近的数据或者丢失当天变更的数据,这种现象就叫做漂移

为什么产生

时间戳字段分为4类:

  1. 数据库表中用来标识数据记录更新时间的时间戳字段(假设这类字段叫modified time)。
  2. 数据库日志中用来标识数据记录更新时间的时间戳字段·(假设这类宇段叫log time)。
  3. 数据库表中用来记录具体业务过程发生时间的时间戳字段(假设这类字段叫proc time)。
  4. 标识数据记录被抽取到时间的时间戳字段(假设这类字段 extract time)。

理论上四个时间戳字段一致,但是实际生产中会有差异。比如业务手工改数据但是没更新modified time;数据抽取需要时间;网络延迟log time晚于业务发生时间。

而我们通常选取一个时间字段来切分ODS,这就导致了数据漂移。

选取四个字段分别产生的数据漂移场景:

  1. modified time :实际生产中最多,但是这个更新时间不更新就会导致数据遗漏,或者凌晨产出的漂移到后一天;
  2. log time: 一般由于系统或网络压力大,log time会晚于proc time,凌晨产出漂移到后一天。举个例子,双十一数据量巨巨大,应该会有支付时间小于记录更新时间的数据。
  3. proc time : 一般一个表不会只有一个业务过程,如果只用一个业务时间会遗漏其他过程的变化数据。
  4. extract time: 这个的偏移会最明显。

解决数据漂移思路

两种方法:
方法一: 多获取一点后一天的数据,保障数据只多不少(简单粗暴)
ODS每个时间分区向前向后都冗余一些数据,具体的切分再让下游根据业务时间proc time来限制。但是这样也会有误差的,比如当天请假了,第二天凌晨撤销了这个申请,这条记录的(审批)状态会更新,下游统计状态会错误统计。

方法二: 多个时间戳字段来保障一定的准确性。

  1. 先根据log time 冗余前一天最后15分钟和后一天凌晨15分钟,再根据多个业务过程的modified time限制在当天。
  2. 后一天15分钟的这些数据,按主键用log time升序去重,这样获取最接近当天的状态变化
  3. 最后将前两步的数据做全外连接,通过限制业务时间 proc_time 来获取想要的数据。
    看起来有点绕,简单理解就是做一些前后的冗余,再通过多个业务相关的发生时间限制在当天,再用时间字段排序取最接近当天状态的数据

http://www.kler.cn/a/396724.html

相关文章:

  • 基于Spring Boot的电子商务系统设计
  • 使用 npm 安装 Yarn
  • 力扣 最长公共前缀-14
  • Array数组方法
  • CSS 响应式设计之媒体查询技术
  • 软件设计师考试大纲
  • 推荐一款流程图和图表绘制工具:WizFlow Flowcharter Pro
  • 【python系列】python数据类型之数字类型
  • el-table 纵向垂直表头处理
  • Rust编程与项目实战-特质(Trait)
  • 雷达信号处理的流程和恒虚警检测CFAR
  • Linux通过端口号找到程序启动路径(Ubuntu20)
  • 贝叶斯网络——基于概率的图模型(详解)
  • Molecular signatures database (MSigDB) 3.0
  • 使用YOLOv9进行图像与视频检测
  • 浪浪云轻量服务器搭建vulfocus网络安全靶场
  • kubesphere环境-本地Harbor仓库+k8s集群(单master 多master)+Prometheus监控平台部署
  • ctfshow(328)--XSS漏洞--存储型XSS
  • 2024年11月第2个交易周收盘总结
  • VLC-QT----Linux编译并运行示例
  • 信息安全工程师(83)Windows操作系统安全分析与防护
  • aws中AcmClient.describeCertificate返回值中没有ResourceRecord
  • RedisTemplate序列化设置
  • 【阅读记录-章节2】Build a Large Language Model (From Scratch)
  • 程序代码设计模式之模板方法模式(1)
  • 3.dns域名解析服务