数据仓库:如何解决ODS数据零点漂移问题

这篇具有很好参考价值的文章主要介绍了数据仓库:如何解决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、【数据仓库】数据漂移的处理文章来源地址https://www.toymoban.com/news/detail-813435.html

到了这里,关于数据仓库:如何解决ODS数据零点漂移问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于舵机的漂移与不听指挥乱动的问题

    在电赛E题中控制二维云台中出现了两个问题,也是好不容易才发现原因然后解决的 一.舵机不听指挥乱动 没有与单片机共地 舵机有三条线,分别是正负极和信号线(用来输入PWM信号),因为舵机所需要的驱动电压比较大,一般在6v往上了,一般的单片机供电无法驱动舵机,就需

    2024年02月14日
    浏览(29)
  • 终极方案——解决MacBook/Mac mini连接无线鼠标卡顿、漂移

    找到如图设置,修改网络首选项顺序 1、在系统设置里新建一个管理员用户 2、在访达-前往-电脑-磁盘-找到新建用户的那个文件夹,拖至桌面 新用户点击左上角访达设置,在侧边栏显示出硬盘消息

    2024年02月13日
    浏览(32)
  • 【数据结构】如何应用堆解决海量数据的问题

    堆(Heap数据结构堆在计算机科学中有着广泛的应用,今天来介绍两种堆的应用:堆排序、Top-k问题🍉 ​ 堆排序是一种基于堆数据结构的排序算法。它的基本思想是,将待排序的序列构建成一个大根堆(或小根堆),然后依次取出堆顶元素(即最大值或最小值),将其放入已排

    2024年02月09日
    浏览(27)
  • 【git】解决本地仓库与远程仓库不一致问题

    目录 方法1:(未验证) 方法2:(验证过) 方法3:常规 1.将远程仓库代码拉取到本地作为本地的一个新的分支 temp 2.将这个temp的分支与我们的主分支对比查看有什么不同,有那些冲突 3.将新的temp分支与本地主分支合并 4.重新提交本地主分支到远程仓库 5、删除分支 方法4、未进

    2023年04月19日
    浏览(29)
  • 如何解决缓存和数据库的数据不一致问题

    数据不一致问题是操作数据库和操作缓存值的过程中,其中一个操作失败的情况。实际上,即使这两个操作第一次执行时都没有失败,当有大量并发请求时,应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步,更新缓存和更新数据库。但是这两步会引

    2024年02月21日
    浏览(31)
  • 数据分层详解ODS、DWD、DWM、DWS、ADS

    Data warehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,它是 一整套包括了etl、调度、建模在内的完整的理论体系 。 数据仓库的方案建设的目的,是为前端查询和分析作为基础,主要应用于OLAP(on-line Analytical Processing),支持复杂的分析操作,侧重决

    2023年04月08日
    浏览(25)
  • 【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者 😶‍🌫️学习目标:3D赛车游戏的基础制作 😶‍🌫️技能掌握

    2024年02月10日
    浏览(38)
  • 【技术评论】大数据时代,区块链如何解决数据安全和隐私问题

    发表时间:2022年6月23日 信息来源:bsvblockchain.org  在这个时代,像GDPR和HIPAA这样的措施为消费者带来了前所未有的数据保护水平,人们理所当然地想知道,由区块链驱动的数据解决方案如何能够符合这些法规的要求。 (全球区块链组织联合创始人)Jorge Sebastiã在沙特愿景2030区

    2024年02月02日
    浏览(75)
  • 解决前端性能问题:如何优化大量数据渲染和复杂交互?

    ✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨  🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 六、优化图片和资源: 七、合并压缩文件 八、使用Web Workers  在前端开发

    2024年03月10日
    浏览(51)
  • 向量数据库如何解决大语言模型的“幻觉”问题

    向量数据库在解决大语言模型的“幻觉”问题方面可以发挥一定的作用。这个问题通常指的是大型语言模型在生成文本时过度依赖于训练数据,导致生成的内容过于特定,缺乏广泛的泛化性。以下是向量数据库可能采取的一些方法: 多样性的文本表示 : 向量数据库存储了大

    2024年01月17日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包