数据可观察性:如何使用SQL构建自己的异常检测器

在本系列文章中, 推荐一个正规滚球网站将介绍如何从头创建自己的数据可观察性监视器, 映射到 数据健康的五个关键支柱. 第一部分可以找到 在这里.

本系列的第二部分改编自Barr Moses和瑞安·卡恩斯的O ' reilly训练, 管理数据停机时间:对数据管道应用可观察性这是该行业第一个关于数据可观察性的课程. 相关的练习是可用的 在这里,本文中显示的经过调整的代码是可用的 在这里.

随着全球对数据需求的增加,强大的数据管道显得尤为重要. 当数据中断时——是否来自模式更改, 空值, 重复, 否则,数据工程师需要知道. 

最重要的是, 推荐一个正规滚球网站需要评估破坏的根本原因——而且要快——在它影响下游系统和消费者之前. 推荐一个正规滚球网站使用“数据停机时间指的是数据丢失、错误或不准确的一段时间. 如果你是一名数据专业人士,你可能会熟悉以下问题:

  • 数据是最新的吗?
  • 数据是否完整?
  • 字段是否在预期范围内?
  • null率比应该的值高还是低?
  • 模式改变了吗?

以有效的方式回答这些问题, 推荐一个正规滚球网站可以借鉴软件工程师的经验: 监控和可观测性.

刷新你的记忆 第一部分,推荐一个正规滚球网站定义 数据可观测性 作为一个组织回答这些问题和评估其数据生态系统健康状况的能力. 数据可观察性的五个支柱反映了数据健康的关键变量: 

  • 新鲜:我的数据是最新的? 在我的数据没有被更新的时间间隔?
  • 分布:我的数据在现场层面的健康程度? 我的数据是否在预期范围内?
  • 体积:是我的数据摄入量达到预期阈值?
  • 模式:我的数据管理系统的正式结构发生了变化?
  • 血统:如果我的一些数据坏了,上游和下游受到什么影响? 我的数据源如何相互依赖?

在本系列文章中, 我很想揭开真相, 研究数据的可观察性是什么样的 在代码中.

In 第一部分, 我看着前面的两根柱子, 新鲜和分布, 并展示了一些SQL代码是如何操作这些概念的. 这些是我认为更“经典”的 异常检测问题 ——给定一个稳定的数据流,是否有任何东西看起来不正常? 良好的异常检测当然是数据可观测性难题的一部分,但它并不是一切. 

同样重要的是 上下文. 如果出现异常,很好. 但是,? 可能是什么上游管道的原因? 什么下游仪表板将受到影响? 我的数据的正式结构改变了? 良好的数据可观察性取决于推荐一个正规滚球网站是否能够适当地利用元数据来回答这些问题.

在这篇文章中, 推荐一个正规滚球网站将着眼于两个旨在回答这些问题的数据可观察性支柱 模式血统. 再一次, 推荐一个正规滚球网站将使用像jupiter和SQLite这样的轻量级工具, 所以你可以轻松地旋转推荐一个正规滚球网站的环境,自己尝试这些练习. 让推荐一个正规滚球网站开始.

推荐一个正规滚球网站的数据环境

本教程基于 练习2和3 奥莱利的课程 管理数据的停机时间. 欢迎您使用Jupyter笔记本和SQL自己尝试这些练习. 推荐一个正规滚球网站将详细介绍,包括锻炼 4,在以后的文章中.

如果你读 第一部分 对于这个系列,您应该熟悉推荐一个正规滚球网站的数据. 和以前一样,推荐一个正规滚球网站将使用 模拟天文数据 关于宜居行星. 我用Python生成数据集, 根据我在生产环境中遇到的真实事件对数据和异常进行建模. 此数据集完全免费使用,并且 跑龙套的文件夹 如果您感兴趣的话,存储库中包含生成数据的代码.

我使用的是SQLite 3.32.3, 这应该使数据库可以从命令提示符或SQL文件与最小的设置. 这些概念可以扩展到任何查询语言 这些实现 可以扩展到MySQL, Snowflake和其他数据库环境的最小变化.

再一次,推荐一个正规滚球网站有了系外行星表

输入的数据库条目 系外行星 包含如下信息:

0._id:表示该行星对应的UUID.
1. 距离:距离地球的距离,以光年为单位.
2. g:地表重力的倍数 g,重力常数.
3. orbital_period:以天为单位的单轨道周期的长度.
4. avg_temp:平均表面温度,单位是开尔文.
5. date_added推荐一个正规滚球网站的系统发现这颗行星的日期,并将其自动添加到推荐一个正规滚球网站的数据库中.

请注意一个或多个 距离, g, orbital_period, avg_temp 可能是 因为丢失或错误的数据而导致的.

sqlite> SELECT * FROM 系外行星 LIMIT 5;

请注意,这个练习是追溯的——推荐一个正规滚球网站正在查看历史数据. 在生产数据环境中, 数据可观察性是实时的,应用于数据生命周期的每个阶段, 因此将涉及与这里所做的略有不同的实现.

看起来推荐一个正规滚球网站最古老的数据是2020-01-01 (请注意:大多数数据库不会存储单个记录的时间戳, 所以推荐一个正规滚球网站的DATE_ADDED列正在为推荐一个正规滚球网站跟踪). 推荐一个正规滚球网站最新的数据…

sqlite> SELECT DATE_ADDED FROM 系外行星 ORDER BY DATE_ADDED DESC LIMIT 1; 2020-07-18

可能是2020年7月18日. 当然,这是推荐一个正规滚球网站在上一篇文章中使用的同一个表. 如果推荐一个正规滚球网站想要探索图式和血统的更多背景支柱, 推荐一个正规滚球网站需要扩展推荐一个正规滚球网站的环境.

现在, 除了系外行星, 推荐一个正规滚球网站有一个表叫做系外行星_EXTENDED, 哪个是过去表的超集. 把它们看作是同一个表是很有用的 不同的时刻. 事实上,系外行星_EXTENDED的数据可以追溯到2020-01-01…

sqlite> SELECT DATE_ADDED FROM 系外行星_EXTENDED ORDER BY DATE_ADDED ASC LIMIT 1; 2020-01-01

而且还包含了截止2020年9月6日的数据,比系外行星的数据还要多:

sqlite> SELECT DATE_ADDED FROM 系外行星_EXTENDED ORDER BY DATE_ADDED DESC LIMIT 1; 2020-09-06

可视化模式变化

这些表格之间还有一些不同之处:

除6个字段外 系外行星, 系外行星_EXTENDED Table包含两个额外的字段:

6. 偏心: 轨道偏心率 围绕着它的主星的行星.

7. 大气:地球大气的主要化学组成.

请注意,如 距离, g, orbital_period, avg_temp,两个 偏心 大气可能是 因为丢失或错误的数据而导致的. 例如, 流氓行星 没有定义的轨道偏心率,而且很多行星根本就没有大气层.

还请注意,数据没有回填, 对象中包含的从表开始的数据条目 系外行星 表)将不会有偏心和大气信息.

两个字段的添加是一个 常模式-推荐一个正规滚球网站的数据的正式蓝图已经修改. 当对数据结构进行更改时,就会发生模式更改, 手动调试可能会令人沮丧. 模式变化可以指示关于数据的任何数量的事情,包括:

  • 添加新的API端点
  • 假定已弃用的字段还没有…已弃用
  • 列、行或整个表的加法或减法

在理想的世界里, 推荐一个正规滚球网站需要记录下这一变化, 因为它表示一个向量,表示推荐一个正规滚球网站的管道可能出现的问题. 不幸的是,推荐一个正规滚球网站的数据库并没有自然地配置为跟踪这些更改. 它没有版本控制历史.

推荐一个正规滚球网站在 第一部分 查询单个记录的年龄时,添加了 DATE_ADDED 列应对. 在本例中,推荐一个正规滚球网站将做一些类似的事情,除了添加了一个完整的表:

的 系外行星_COLUMNS 表“版本”推荐一个正规滚球网站的模式中记录的列 系外行星_EXTENDED 在任何给定的日期. 看看第一个和最后一个条目, 推荐一个正规滚球网站可以看到这些列在某一时刻发生了明显的变化:

现在,回到推荐一个正规滚球网站最初的问题:图式到底是什么时候改变的? 因为推荐一个正规滚球网站的列列表是按日期索引的, 推荐一个正规滚球网站可以通过一个快速的SQL脚本找到更改的日期:

这里是返回的数据,为了便于阅读,我重新格式化了它:

对于这个查询,推荐一个正规滚球网站返回违规日期:2020-07-19. 比如新鲜度和分布可观察性, 实现模式可观察性遵循一个模式:推荐一个正规滚球网站识别 有用的元数据 它会发出管道运行状况的信号,跟踪它,并构建检测器来提醒推荐一个正规滚球网站潜在的问题. 提供一个额外的表,如 系外行星_COLUMNS 这是一种追踪图式的方法,但还有很多其他方法吗. 我鼓励您考虑如何为自己的数据管道实现模式更改检测器!

可视化血统

推荐一个正规滚球网站将血统描述为 最全面的 数据可观察性的5个支柱,并有充分的理由. 血统背景事件告诉推荐一个正规滚球网站(1)哪些下游来源可能受到影响, (2)哪些上游来源可能是根本原因. 虽然用SQL代码“可视化”沿袭并不直观, 一个简单的例子可以说明它如何有用.

为此,推荐一个正规滚球网站需要再次扩展数据环境.

介绍:宜居

让推荐一个正规滚球网站向数据库中添加另一个表. 到目前为止,推荐一个正规滚球网站一直在记录系外行星的数据. 这里有一个有趣的问题要问:这些行星中有多少可能存在生命?

的 适宜居住的 表的数据来自 系外行星 为了帮助推荐一个正规滚球网站回答这个问题

一个条目在 适宜居住的 包含以下:

0. _id:表示该行星对应的UUID.

1. 近日点最亲密的距离 在一个轨道周期内到达天体.

2. 远日点最远的距离 在一个轨道周期内到达天体.

3. 大气:地球大气的主要化学成分.

4. 可居住性: 0到1之间的实数,表示该行星上存在生命的可能性有多大.

5. min_temp:地球表面的最低温度.

6. max_temp:地球表面的最高温度.

7. date_added推荐一个正规滚球网站的系统发现这颗行星的日期,并将其自动添加到推荐一个正规滚球网站的数据库中.

就像 系外行星,值 近日点远日点大气min_tempmax_temp 是允许的 . 事实上, 近日点 和 远日点 将  对于任何 _id in 系外行星 在哪里 偏心 is ,因为你使用轨道偏心率来计算这些指标. 这解释了为什么这两个字段总是  在推荐一个正规滚球网站的旧数据条目中:

sqlite> SELECT * FROM 适宜居住的 LIMIT 5;

推荐一个正规滚球网站知道这个 适宜居住的 取决于 系外行星 (或者,同样, 系外行星_EXTENDED), 系外行星_COLUMNS 确实也. 推荐一个正规滚球网站数据库的依赖关系图是这样的:

图片由蒙特卡罗提供.

非常简单的沿袭信息,但已经很有用了. 让推荐一个正规滚球网站来看看 适宜居住的 在这张图的背景下,看看推荐一个正规滚球网站能学到什么.

调查异常

当推荐一个正规滚球网站有一个关键指标时,比如宜居性 适宜居住的,推荐一个正规滚球网站可以通过几种方式评估该指标的健康程度. 首先,平均值是多少 可居住性 对于给定日期的新数据?

看看这些数据,推荐一个正规滚球网站发现有些地方出了问题. 宜居性的平均值通常在0左右.5,但它减半到0左右.25在记录的数据之后.

这显然是一种分布异常现象……. 但是是什么引起的呢?

这是一个明显的分布异常现象,但这究竟是怎么回事呢? 换句话说,什么是 根本原因 这个异常?

为什么推荐一个正规滚球网站不看看  宜居度,就像推荐一个正规滚球网站做的那样 第一部分?

幸运的是,这里的一切看起来都很正常:

但这看起来并不是推荐一个正规滚球网站问题的原因. 如果推荐一个正规滚球网站着眼于另一个分配健康指标,即 零值率?

显然,这里的问题更严重:

这是另一种分布异常,但是是什么引起的呢?

推荐一个正规滚球网站可以改装推荐一个正规滚球网站内置的一个分布探测器 第一部分 要得到可居住性领域中可感知的零利率的第一个日期:

推荐一个正规滚球网站可以通过命令行运行这个查询:





美元sqlite3系外行星.db < queries/血统/可居住性-zero-rate-detector.sql

Date_added | 可居住性_zero_rate | prev_可居住性_zero_rate

2020–07–19 .369047619047619 .0

2020年7月19日是零利率开始出现异常结果的第一天. 回想一下,这是与模式更改检测同一天 系外行星_EXTENDED系外行星_EXTENDED 是上游的 适宜居住的,所以这两起事件很有可能有关联.

通过这种方式,血统信息可以帮助推荐一个正规滚球网站确定 根本原因 并尽快解决这些问题. 比较以下两种对该事件的解释 适宜居住的:

  1. 2020年7月19日,可居住性列的零率 适宜居住的 Table从0%上升到37%.
  2. 2020年7月19日,推荐一个正规滚球网站开始跟踪另外两个领域, 偏心 和 大气,在 系外行星 table. 这对下游的桌子产生了不利的影响 适宜居住的,经常设置领域 min_temp 和 max_temp 到极值 偏心 并不是 . 这反过来又导致了 可居住性 零速率的场峰,推荐一个正规滚球网站检测到平均值的异常下降.

解释(1)仅仅使用了一个异常发生的事实. 解释(2)使用血统, 表和字段之间的依赖关系, 将事件置于上下文并确定根本原因. (2)中的一切都是正确的, 顺便说一下, 我鼓励你们去弄乱环境,了解自己正在发生什么. 虽然这些只是简单的例子,但配备(2)的工程师会更快 理解 和 解决 根本的问题,以及这一切都归功于适当的可观察性.

接下来是什么? 

跟踪模式更改和沿袭可以让您前所未有地了解数据的运行状况和使用模式, 提供关于谁的重要上下文信息, 什么, 在哪里, 为什么, 以及你的数据是如何被使用的. 事实上, 在理解数据停机的下游(通常是真实世界)影响时,模式和沿继是两个最重要的数据可观察性支柱.

总结:

  • 观察推荐一个正规滚球网站的数据的 模式 意味着理解数据的正式结构,以及它的变化时间和方式.
  • 观察推荐一个正规滚球网站的数据的 血统 意味着理解推荐一个正规滚球网站管道中的上游和下游依赖关系, 把孤立的事件放在更大的背景下.
  • 数据可观察性的这两大支柱都涉及跟踪适当的元数据, 并将推荐一个正规滚球网站的数据转换成可以理解异常现象的方式.
  • 更好的可观察性意味着更好地理解数据中断的原因和方式, 减少检测时间和分辨率时间.

推荐一个正规滚球网站希望“实践中的数据可观察性”的第二部分是有用的. 感谢你的阅读. 

在第三部分之前,我希望您不会出现数据停机! 

有兴趣学习更多关于数据可观察性的知识? 接触 瑞安可以玩滚球的正规app队