为什么测试数据是不够的

在2021年,仅靠数据测试不足以确保数据的准确和可靠. 就像软件工程团队利用像New Relic这样的解决方案一样, DataDog, 和AppDynamics来监视其应用程序的运行状况, 现代数据团队需要类似的监视和可观察性方法. 下面介绍如何利用测试和监视来防止数据管道破裂并实现 高度可靠 data.

对大多数公司来说,数据就是新的软件.

和软件一样,数据是企业成功的基础. 它需要“永远开机” 数据停机时间 与应用程序停机一样勤勉地处理(5个9,任何人都?). 就像你的软件一样, 遵守团队的数据sla对于保持公司的竞争优势至关重要.

虽然很多团队会用他们用于测试软件的准确性和可靠性的可靠方法来测试他们的数据,这是有道理的, 推荐一个正规滚球网站的行业正处于一个转折点: 单靠数据测试是不够的.

在运行分析之前,依靠数据测试来发现数据管道中的问题,就相当于在部署新软件之前,依靠单元和集成测试来识别错误代码, 但在现代数据环境中,这是不够的. 同样,没有可靠的软件,你也不可能拥有真正可靠的软件 应用程序监视和可观察性 贯穿整个代码库, 如果没有跨整个数据基础设施的数据监视和可观察性,就无法实现完整的数据可靠性.

而不是完全依赖于测试, 最好的数据团队正在利用双重方法, 混合数据测试与常数 监控和可观测性 在整个管道中. 让推荐一个正规滚球网站仔细看看这意味着什么, 以及如何开始将数据监视应用到自己的堆栈.

什么是数据测试?

图片由 西格蒙德 on Unsplash.

数据测试是在管道的不同阶段验证你对数据的假设的过程. 基本 数据测试方法 包括使用固定数据的架构测试或自定义数据测试, 哪些可以帮助确保etl平稳运行, 确认您的代码在一组众所周知的场景中正常工作, 并且在代码更改时防止回归.

数据测试通过对空值进行静态测试来帮助进行测试, 独特性, 参照完整性, 以及其他常见的数据问题指标. 这些工具允许您手动设置阈值,并对您的数据的基本假设知识进行编码,这些知识应该保存在管道的每次运行中.

事实上, 数据测试是一个很好的解决方案, 众所周知的问题,并在新数据或新代码打破您最初的假设时发出警告. 您甚至可以使用测试来确定您的数据是否符合您的有效性标准—例如保持在预期范围内或具有惟一值. 这在精神上与软件工程师使用测试来提醒他们预期可能发生的理解良好的问题非常相似.

但, 同样的,单靠单元测试不足以保证软件的可靠性, 数据测试本身并不能防止破损的数据管道. 

这里有 3个原因 为什么需要一种结合了测试和监控的混合方法来为现代数据堆栈铺平道路.

数据变化很大

在软件工程中,推荐一个正规滚球网站大量使用测试来发现代码中预期的问题. 然而, 每个软件工程师都知道,如果她想要交付一个高度可靠的应用程序,这是不够的. 生产环境具有比任何工程师在开发过程中所期望的更大的可变性.

它是否属于业务逻辑的边缘情况, 很难预测软件组件之间的交互, 或系统中未预料到的输入, 软件问题将不可避免地出现. 因此, 一个健壮的可靠性策略将把测试作为一个健全的检查结合起来, 具有监视和可观察性,以验证实际生产环境中的正确性和性能.

数据也一样. 而测试可以发现和预防许多问题, 数据工程师不太可能在开发过程中预测到所有的可能性, 即使她可以, 这将需要大量的时间和精力.

在某些方面,数据甚至比传统软件更难测试. 即使是中等规模的数据集,其可变性和纯粹的复杂性也是巨大的. 让事情变得更复杂, 数据也经常来自于“外部”源,它必然会在没有通知的情况下发生变化. 一些数据团队甚至会努力寻找一个具有代表性的数据集,该数据集可以很容易地用于开发和测试目的,因为规模和遵从性限制.

监视和可观察性通过提供一个额外的可见层来填补这些空白,以了解管道中不可避免的(而且可能有问题的)更改.

端到端覆盖是关键

对于许多数据团队来说, 创建一个健壮的, 高覆盖测试套件是非常费力的,并且在许多情况下可能是不可能或不理想的——特别是如果已经存在几个未覆盖的管道. 而数据测试可以用于较小的管道, 它不能很好地跨现代数据栈扩展.

大多数现代数据环境都非常复杂, 数据从数十个来源流入数据仓库或湖泊,然后被传播到BI/ML,供终端用户使用或到其他操作数据库提供服务. 从源头到消费, 数据将经过大量的转换, 有时是几百个.

实际情况是,数据可能在其生命周期的任何阶段被破坏——无论是由于更改还是来源上的问题, 调整流程中的一个步骤, 或者多个管道之间的复杂交互. 保证数据的高可靠性, 因此,推荐一个正规滚球网站必须对管道中的中断具有端到端的可见性. 至少, 推荐一个正规滚球网站必须具有足够的可观察性,以便能够在数据在系统中传播时排除和调试问题.

由于以下原因,数据测试变得非常有限:

  • 在这个过程中,您的管道可能会利用几个ETL引擎和代码框架, 在整个组织中采用一致的测试策略是非常具有挑战性的.
  • 转换和测试之间的强耦合为系统引入了不可靠性——任何对ETL的预期更改(或者, 在某些情况下, 意外故障)将导致测试无法运行和问题遗漏.
  • 管道阶段的复杂性和数量使得达到良好的测试覆盖率变得非常困难.

当涉及到确保完整的数据可靠性时,这只是触及了数据测试的局限性的表面.

数据测试债务

虽然推荐一个正规滚球网站都渴望有良好的测试覆盖率, 数据团队会发现他们的部分管道没有被覆盖. 对于许多数据团队来说, 根本不存在任何保险, 因为在管道开发的早期,可靠性常常被速度所取代.

在这一点上, 为现有管道添加测试覆盖可能是一项巨大的投资. 如果关于现有管道的关键知识掌握在数据团队的少数成员(通常是早期成员)手中, 追溯解决您的测试债务将, 最好的情况是, 把资源和精力用在能够推动团队发展的项目上. 在最坏的情况下, 如果团队的早期成员已经不在公司工作,并且文档也不是最新的,那么修复测试债务几乎是不可能的.

可靠的监视和可观察性方法可以帮助缓解数据测试债务带来的一些挑战. 通过使用基于ml的方法,从过去的数据中学习并监视新的传入数据, 团队能够在几乎没有投资和民俗知识的情况下创建现有管道的可见性, 同时也减轻了数据工程师和分析师的负担,减轻了测试债务.

下一步:数据监控和可观察性

In 2021, 数据工程师正处在一个关键的时刻——与推荐一个正规滚球网站不断增长的需求保持同步, 不断变化的数据需要或满足于不可靠的数据. 对大多数人来说,他们别无选择.

就像软件一样,数据需要测试和监控以确保一致的可靠性. 现代数据团队必须将数据视为动态的, 不断变化的实体, 应用不同的方法,不仅仅关注严格的测试, 而且还不断 监控和可观测性.

通过与软件可靠性一样的努力来实现数据可靠性, 数据团队可以确保他们的数据在任何时候都处于健康状态 数据健康的关键支柱,包括数量、模式、新鲜度、血统和分布——在它们影响到你的业务之前.