使用SQL实现数据的可观察性

在本系列文章中, 推荐一个正规滚球网站将介绍如何从头创建自己的数据可观察性监视器, 映射到 数据健康的五个关键支柱. 本系列的第一部分改编自Barr Moses和瑞安·卡恩斯的O ' reilly训练, 管理 数据停机时间:对数据管道应用可观察性, 该行业第一个关于数据可观察性的课程. 相关的练习是可用的 在这里,本文中显示的经过调整的代码是可用的 在这里.

从空值和重复行, 到建模错误和模式更改, 数据可能因多种原因而中断. 数据测试 是推荐一个正规滚球网站抵御坏数据的第一道防线吗, 但是,如果数据在其生命周期中破裂,会发生什么呢? 

推荐一个正规滚球网站称这种现象为数据停机, 它指的是数据丢失的时间段, 错误的, 或者不准确. 数据停机时间 提示推荐一个正规滚球网站提出以下问题:

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

在数据中断时触发警报,防止数据停机, 数据团队可以从软件工程的朋友那里获得一个可靠的策略: 监控和可观测性

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

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

以这种概念性的方式谈论数据的可观察性是一回事, 但彻底的治疗应该会拉开帷幕 在代码的底层,数据的可观察性实际上是什么样子的?

要完全回答这个问题是困难的, 因为细节将取决于个人对数据仓库的选择, 数据湖, BI工具, 首选语言和框架, 等等. 即便如此,使用SQLite和jupiter等轻量级工具来解决这些问题还是很有用的.

在这篇文章中, 推荐一个正规滚球网站通过一个示例数据生态系统,用SQL创建推荐一个正规滚球网站自己的数据质量监视器,并探索数据可观察性在实践中是什么样的.

让推荐一个正规滚球网站来看看.

实践中的数据可观察性

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

推荐一个正规滚球网站的样本数据生态系统使用 模拟天文数据 关于宜居行星. 为了练习的目的, 我用Python生成数据集, 根据我在生产环境中遇到的真实事件建模异常. 此数据集完全免费使用,并且 跑龙套的文件夹 如果您感兴趣的话,存储库中包含生成数据的代码.

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

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

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;

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

为了练习的目的, 推荐一个正规滚球网站将建立数据的可观察性算法的新鲜度和分布, 但是在以后的文章中, 推荐一个正规滚球网站将解决剩下的五大支柱——甚至更多.

新鲜

推荐一个正规滚球网站监测数据可观察性的第一个支柱是新鲜度, 这可以为推荐一个正规滚球网站提供重要数据资产最后更新时间的有力指标. 如果一份定时更新的报告突然看起来很陈腐, 这种类型的异常应该会给推荐一个正规滚球网站一个强烈的信号,表明有什么东西不对劲.

首先,请注意 DATE_ADDED 列. SQL不存储添加单个记录时的元数据. 所以,为了在追溯的环境中可视化新鲜度,推荐一个正规滚球网站需要自己跟踪信息.

分组的 DATE_ADDED 专栏可以让推荐一个正规滚球网站深入了解其中的原因 系外行星 每日更新. 例如,推荐一个正规滚球网站可以查询每天新增的id数量:

你可以自己运行这个 美元sqlite3系外行星.db < queries/freshness/rows-added.sql in 存储库. 推荐一个正规滚球网站得到以下数据:

基于推荐一个正规滚球网站的数据集的图形表示,它看起来像 系外行星 每天持续更新约100个新条目, 尽管有很多天没有数据进来的间隙.

回想一下,对于新鲜度,推荐一个正规滚球网站想要问的问题是“我的数据是最新的吗??”,因此, 了解表更新中的这些空白对于理解数据的可靠性至关重要.

策划rows_added vs. date_added
新鲜异常!

该查询通过引入一个度量来操作新鲜度 DAYS_SINCE_LAST_UPDATE. (注:由于本教程使用SQLite3, MySQL中计算时间差的SQL语法是不同的, 雪花, 和其他环境).

结果表格上写着“日期” X的最新数据 系外行星 是 Y 天大的.“这是没有明确从 DATE_ADDED 列——但是应用数据可观察性为推荐一个正规滚球网站提供了揭示数据可观察性的工具.

策划days_since_last_update vs. date_added

现在,推荐一个正规滚球网站有了检测新鲜度异常所需的数据. 剩下要做的就是设置一个 阈值 参数 Y - 多少天才算多? 参数将查询转换为检测器, 因为它决定了什么是异常(读:值得提醒),什么不是. (关于设置阈值参数的详细信息将在后面的文章中介绍!).

返回给推荐一个正规滚球网站的数据代表了新鲜度事件发生的日期.

2020年5月14日,表中最新数据为8天前的数据! 这样的停机可能表示推荐一个正规滚球网站的数据管道出现了故障, 了解推荐一个正规滚球网站是否将这些数据用于任何有价值的事情(以及推荐一个正规滚球网站是否在生产环境中使用这些数据)是很好的, 机会是, 推荐一个正规滚球网站是).

新鲜度检测

特别注意查询的最后一行: DAYS_SINCE_LAST_UPDATE > 1;.

这里,1是a 模型参数 -这个数字没有任何“正确”之处, 尽管改变它会影响推荐一个正规滚球网站认为事件发生的日期. 数字越小,推荐一个正规滚球网站就能发现更多真实的异常现象(高 回忆),但有可能,其中一些“异常”并不反映真正的宕机. 数字越大, 推荐一个正规滚球网站捕捉到的所有异常就越有可能反映真实的异常(高 精度),但推荐一个正规滚球网站可能会错过一些.

出于本例的目的, 推荐一个正规滚球网站可以将1更改为7,因此只能在2020-02-08和2020-05-14捕捉到两个最严重的中断. 这里的任何选择都将反映特定的用例和目标, 当将数据可观察性大规模应用于生产环境时,这是一个需要不断实现的重要平衡.

下面,推荐一个正规滚球网站使用同样的新鲜度检测器,但是 DAYS_SINCE_LAST_UPDATE > 3; 作为门槛. 其中两个较小的中断现在没有被检测到.

图片的文章
请注意这两个未检测到的中断——它们必须少于3天的间隔.

现在,推荐一个正规滚球网站用同样的新鲜度检测器来观察 DAYS_SINCE_LAST_UPDATE > 7; 现在作为门槛. 除了两次最大的停电,现在所有的停电都没有被发现.

图片的文章

就像行星,最优模型参数位于a “适居带” 或者被认为太低和太高的值之间的“甜蜜点”. 这些数据可观察性概念(以及更多)!)将在后面的文章中讨论.

分布

接下来,推荐一个正规滚球网站想要评估推荐一个正规滚球网站数据的实地水平和分布健康状况. 分布告诉推荐一个正规滚球网站所有数据的期望值, 以及每个值出现的频率. 一个最简单的问题是,“我的数据多久出现一次? ”? 在许多情况下, 某种程度的不完整数据是可以接受的——但是如果10%的零利率变成90%的话, 推荐一个正规滚球网站会想知道的.

这个查询返回大量数据! 发生了什么?

的一般公式 转换(sum(当some_metric为空时,1 else 0 end)为float) / count (*),当按 DATE_ADDED 列,告诉推荐一个正规滚球网站速率  值 SOME_METRIC 在每天批量的新数据中 系外行星. 通过查看原始输出很难获得某种感觉, 但视觉效果可以帮助解释这种异常现象:

视觉效果清楚地表明,存在推荐一个正规滚球网站应该检测到的零利率“峰值”事件. 让推荐一个正规滚球网站关注最后一个指标, AVG_TEMP就目前而言,. 推荐一个正规滚球网站可以用a来检测零峰值 简单的阈值:

就检测算法而言,这种方法有点迟钝. 有时候,推荐一个正规滚球网站的数据中的模式非常简单,这样一个阈值就可以达到这个目的. 但在其他情况下,数据会很嘈杂或有其他并发症,比如 季节性这就要求推荐一个正规滚球网站改变推荐一个正规滚球网站的方法.

图片的文章

例如,2020年06月02日、2020年06月03日、2020年06月04日可能是冗余检测. 推荐一个正规滚球网站可以过滤掉发生在其他警报之后的日期:

注意,在这两个查询中,关键参数都是 0.9. 推荐一个正规滚球网站实际上是在说:“任何高于90%的零利率都是一个问题,我需要了解它.”

图片的文章

在这种情况下,推荐一个正规滚球网站可以(而且应该)通过应用的概念更聪明一点 移动平均 使用一个更智能的参数:

图片的文章

一个澄清:注意在第28行,推荐一个正规滚球网站使用数量进行过滤 AVG_TEMP_零_RATE——TWO_WEEK_ROLLING_AVG. 在其他情况下,推荐一个正规滚球网站可能需要 ABS () 这个误差量,但不是这里,原因是  如果速率“峰值”代表的是较之前平均值的增长,那么它就更令人担忧了. 在任何时候进行监控可能都不值得 S的频率突然下降,而检测到a  加息是显而易见的.

当然,有越来越复杂的异常检测指标,比如 z得分 和 自回归建模 这超出了推荐一个正规滚球网站的范围. This tutorial just provides the basic scaffolding for field-health monitoring in SQL; I hope it can give you ideas for your own data!

接下来是什么?

这篇简短的教程意在说明“数据可观察性”并不像它的名字那么神秘, 用一种全面的方法来了解你的数据健康状况, 您可以在管道的每个阶段确保高数据信任和可靠性.

事实上, 数据可观察性的核心原则可以通过普通的SQL“检测器”实现,提供了一些关键信息,如记录时间戳和历史表元数据被保存. 还值得注意的是,对于随着生产环境而增长的端到端数据可观察性系统来说,关键的基于ml的参数调优是必需的.

本系列的后续文章将重点关注分布和模式中的异常情况,请继续关注, 沿袭和元数据在数据可观察性中的作用, 以及如何大规模地监控这些支柱以获得更可靠的数据.

在此之前,希望您不会出现数据停机!

对如何在尺度上应用数据可观察性有兴趣? 接触 瑞安 剩下的 蒙特卡罗团队.