数据工程师的根本原因分析指南

数据管道可能因为上百万种不同的原因而中断, 也没有一种万能的方法来理解如何或为什么. 以下是数据工程师在进行数据质量问题的根本原因分析时必须采取的五个关键步骤. 

虽然我不能肯定,但我相信推荐一个正规滚球网站很多人都去过那里. 

我说的是下午晚些时候的Slack消息,它看起来像:

我在《推荐一个正规滚球网站》工作期间,这种情况在我身上发生过很多次. 随着 点的协议, 推荐一个正规滚球网站的数据治理工具, 我花了很多时间思考和构建仪表盘来评估客户发送给Segment的数据质量. 

作为这个产品的所有者,这些仪表盘的任何问题都直接找我. 我解决这些问题的方法可以归结为两个步骤:

  1. 我急切地向一位在推荐一个正规滚球网站团队工作了4年以上(在工程时间方面有几十年的历史知识)的数据工程师寻求紧急帮助. 
  2. 如果她不在,就花几个小时抽查1000张表1:1来调试这个管道. 

你懂的. 

经过多年与数十个数据工程团队的交谈和工作, 我学过指挥 根本原因分析 (RCA)处理数据质量问题的方法可以简单到只需要查看风流日志即可, 或者复杂到内省5+系统,以确定上游数据供应商在少数记录值中添加了一些尾随空格字符.

在这篇文章中, 我将总结我的经验,并通过五步方法来加快这个过程, 少一点痛苦, 下次这种事发生在你身上的时候会更有效率. 

什么是成功的根本原因分析? 

数据停机时间 罢工,第一步(好吧,在暂停你的管道之后)是确定是什么破坏了.

在理论上, root cause听起来就像运行一些SQL查询来分割数据一样简单, 但在实践中, 这个过程可能相当具有挑战性. 事件可以以不明显的方式在整个管道中显示,并影响多个, 有时数百, 的表.

例如,数据停机的一个常见原因是新鲜度- i.e. 当数据异常过时时. 这样的事件可能是由许多原因造成的, 包括一份排着队的工作, 一段时间了, 没有及时交付数据集的合作伙伴, 一个错误, 或者意外的日程安排改变,从你的DAG中删除了作业.

以我的经验, 我发现大多数数据问题都可以归因于以下一个或多个事件: 

  1. 输入作业、管道或系统的数据的意外更改
  2. 逻辑的改变(ETL、SQL、火花作业等).)转换数据
  3. 一个操作的问题, 例如运行时错误, 权限的问题, 基础设施故障, 时间表的变化, 等.

快速找出手头的问题不仅需要适当的工具, 但是,一个全面的方法,考虑到这三个来源中的每一个是如何和为什么会破裂的. 

这是你要做的.

步骤1. 看看你的血统

图片由蒙特卡罗提供.

你知道客户仪表盘坏了. 您还知道这个仪表板是建立在一个很长的转换链之上的, 从几个(或者几十个……)数据源中获取数据. 

去了解什么被破坏了, 你将需要找到你的系统中最上游的节点,这些节点显示出问题——这是事情开始的地方,也是答案所在……如果你幸运的话, 所有问题的根源都发生在有问题的仪表板中,您将很快确定问题所在. 

在糟糕的一天, 该问题发生在系统的最上游的一个源上, 许多转换步骤远离损坏的仪表盘——这将需要在DAG上跟踪问题一整天, 然后回填所有破碎的数据.

外卖. 确保每个人(数据工程师, 数据分析师, 分析工程师, 和数据科学家)故障排除数据问题可以访问最新的血统. 您的沿袭应该包括BI报告之类的数据产品, ML模型或反向etl接收器是有用的. 战场级别的血统是加分项. 

步骤2. 看看代码

图片由蒙特卡罗提供.

您找到了遇到该问题的最上游的表. 恭喜你,你离了解根本原因又近了一步. 现在,您需要了解您的ETL进程是如何生成那个特定的表的. 

查看创建表的逻辑, 甚至是影响事件的特定领域, 会帮助你提出关于问题的合理假设吗. 问问你自己:

  • 什么代码最近更新的表? 当?
  • 如何计算相关字段? 按照这种逻辑,是什么可能产生了“错误的”数据?
  • 最近逻辑有什么变化吗,可能会引发问题?
  • 是否有任何特别的写入表? 最近回填了吗?
图片由蒙特卡罗提供.

外卖. 确保对数据问题进行故障排除的每个人都能快速地追溯到表的逻辑(SQL, 火花, 或者其他)创造了它们. 把事情搞清楚, 您不仅需要知道代码当前的样子, 还有表最后一次更新时的样子理想情况下是什么时候. 虽然推荐一个正规滚球网站都试图避免它们,但回填和特别写作应该被考虑在内.

步骤3. 看看你的数据

图片由蒙特卡罗提供.

现在您知道了数据是如何计算出来的,以及这些数据是如何导致事件发生的. 如果你还没发现根本原因的话, 现在应该更仔细地查看表中的数据,以找到错误的提示. 

问问你自己:

  • 所有记录的数据都是错误的吗? 对于一些记录?
  • 数据在某一特定时期是否错误?
  • 对于数据的特定子集或片段,数据是否错误.g. 只有你的和roid用户或只有来自法国的订单?
  • 是否有新的数据段(你的代码还没有考虑到…)或缺失的部分(你的代码依赖于…)?
  • 最近的思维模式是否发生了改变,从而解释了问题?
  • 你的号码从美元换成美分了吗? 你从太平洋标准时间到东部标准时间的时间戳?

这样的例子不胜枚举.

图片由蒙特卡罗提供.

这里的一种很有前途的方法是,研究具有异常记录的表中的其他字段如何提供关于数据异常发生在何处的线索. 例如,我的团队最近浮出了一个重要的问题 用户 表中,推荐一个正规滚球网站的一个客户经历了null率的跳跃 user_interests 场. 推荐一个正规滚球网站看了 source 场 (推特, FB,谷歌)来看看一个关系模式是否能给推荐一个正规滚球网站指明正确的方向. 

这种类型的分析提供了两个关键的见解, 这两者都可以解释空记录的增加, 但最终会导致非常不同的行动.

  1. 关联的记录的比例 源=“推特” 显著增加,其中通常有更多的记录 user_interests = "零" 比其他来源
  2. 其中记录的比例 user_interests = "零" 增加了与 源=“推特”,而记录的比例为 源=“推特” 并没有改变

观点1, 推荐一个正规滚球网站可能只是经历了一个季节性的问题或一个有效的营销活动的结果. 观点2, 推荐一个正规滚球网站可能会在处理来自推特来源的用户数据时遇到问题,可以将推荐一个正规滚球网站的调查集中在来自推特的数据上

外卖. 确保每个故障排除数据问题的人都能方便地分割数据,以找到问题与各个部分之间的关系, 时间周期和数据的其他切割. 对数据或其模式的最近更改的可见性是救命稻草. 请记住,虽然这些统计方法是有帮助的, 它们只是更大的RCA过程的一部分.

步骤4. 查看您的操作环境 

图片由蒙特卡罗提供.

好了,数据证实了. 现在? 许多数据问题是运行ETL/ELT作业的操作环境的直接结果. 

查看ETL引擎的日志和错误跟踪可以帮助回答以下一些问题:

  • 相关工作是否有任何错误? 
  • 在开始工作时是否有不寻常的延迟?
  • 是否有长时间运行的查询或低性能的作业导致延迟?
  • 是否有任何权限、网络或基础设施问题影响执行? 最近这些有什么变化吗?
  • 是否对作业调度进行了任何更改,导致不小心掉了作业或将作业放在了依赖树中?
图片由蒙特卡罗提供.

外卖. 确保对数据问题进行故障排除的每个人都理解ETL作业是如何执行的,并能够访问相关的日志和调度配置. 了解基础设施、安全和网络也会有所帮助.

步骤5. 利用你的同行

图片由蒙特卡罗提供.

你已经做了所有你能做的(或者也许你在寻找捷径)-下一步是什么? 你需要从你的数据团队那里得到指导. 在你开始向Slack狂轰乱炸之前,先问问自己:

  • 这个数据集在过去发生过什么类似的问题? 团队做了什么来调查和解决这些问题?
  • 谁拥有现在正在经历这个问题的数据集? 我可以向谁了解更多的情况?
  • 谁使用的数据集正在经历这个问题? 我可以向谁了解更多的情况?

外卖. 确保解决数据问题的每个人都能访问关于数据集所有权和使用情况的元数据, 这样他们就知道该问谁. 带有有用文档的数据事件历史也会有所帮助.

一切都结束了 

图片由蒙特卡罗提供.

描述:在一天结束的时候, 你的目标是表面的每一个洞察,你需要快速完成你的RCA在最少的点击可能. 基于传承自动生成洞察力的方法, 历史记录, 而元数据可以使这个过程简单而快速.

在接近实时地解决和预防数据质量问题时,根本原因分析是一个强大的工具, 但重要的是要记住,损坏的管道很少能追溯到一个特定的问题. 像任何分布式架构一样, 您的数据生态系统由一系列复杂的逻辑组成, 事件, 当然, 管道,, 就像一个科学实验, 用多种方式做出反应. 

话虽这么说, 推荐一个正规滚球网站希望这个框架能帮助您实现更好的数据质量, 结果就是, 更值得信赖和可靠的管道. 通过利用这种方法, 你, 太, 如何将RCA从一个压力诱导的唤醒电话转变为一个可扩展和可持续的实践,为您的整个数据组织.

在这个过程中, 你会给那个数据工程师(你知道的, 人类数据管道百科全书)稍事休息……

想了解更多关于如何在数据管道上进行RCA的知识? 接触 旧金山可以玩滚球的正规app队的其他队员