什么是数据沿袭、数据世系(data lineage)?

22-09-20 banq

在 Back Market 的数据工程实习期间,我专注于为我们的内部数据消费者设计和集成数据沿袭平台。本文收集了我学到的关于如何快速识别不同类型的数据沿袭(数据世系data lineage)的关键经验。下面的文章将重点介绍实现。

可以将数据沿袭/数据世系分为 3 类:
  • 数据集沿袭(dataset lineage):跟踪数据集之间的依赖关系
  • 作业沿袭(job lineage):跟踪数据集处理脚本及其输入/输出数据集之间的依赖关系
  • 运行沿袭(run lineage):跟踪这些Job的执行


上下文背景介绍
有各种内部数据消费者,即在日常活动中使用数据的利益相关者,例如。

  • 数据分析师:通常对我们的数据仓库进行查询,以建立一个商业分析师可以轻松使用的仪表盘。
  • 分析工程师:创建数据产品,为数据分析师准备最容易使用的数据。
  • 数据工程师:定期使用数据,例如监测我们基础设施的成本。

随着公司在过去几年中的大量增长,业务数据量也大幅增长。一系列新的外部工具,其中有价值的数据开始被公司采用(如Salesforce或Zendesk)。因此,数据工程团队收集的数据数量也大大增加。对于内部数据消费者来说,寻找和访问准确的数据,对于数据工程师来说,处理来自我们的数据生产者的传入数据和管理数据访问,开始变得很痛苦。最终,回答一些简单的问题,如:"我的数据来自哪里?
  • "我的数据是从哪里来的?
  • "如果我对这个表进行修改,哪些表/仪表板会受到影响?"
  • "谁在公司里拥有/使用哪些表?"
  • "表X依赖于哪些表?哪些表依赖于表Y?"
  • 这促使我们在我们的堆栈中引入了一个数据脉络系统,以更有效地处理这类问题。


什么是数据沿袭Data Lineage?
数据沿袭Data Lineage允许人们跟踪数据从源头到消费者的流动,同时也跟踪其间的所有转换过程。

数据世系可以被看作是 "数据的家谱family tree for data”"。大多数情况下,它是用”线代图lineage graph“来表示的。


数据沿袭可用于许多方面:
  • 数据信任,这是数据世系的主要目标。如果世系工具没有报告错误,就可以让人对仪表盘的指标的可靠性更有信心。因为在数据流水线上 "一切都是绿色的"。然而,当一个指标在仪表盘上看起来不正常时,线程图允许执行根本原因分析,以检查是否出了问题--如果有一个 "红色 "警告。有了一个足以发现错误的细化工具,调试时间就会大大减少。
  • 数据理解。脉络图允许人们更好地可视化数据生命周期,有一个简单而快速的鸟瞰图--脉络图使数据的导航比普通的SQL查询更顺畅。市场上的大多数工具还提供了一个搜索栏,以方便发现数据,允许新人快速浏览数据集或老员工发现最新的模式变化。
  • 影响分析。对于一个给定的表/仪表盘,上游的依赖关系是直接参与其创建的表。另一方面,对于一个给定的表,下游的依赖关系,是直接从这个表创建的表/仪表板。Lineage同时引用了上游和下游的依赖关系,降低了数据破坏性变化的风险,使系统迁移更加容易。
  • 数据合规性。Lineage还可以帮助快速识别公司内部的数据所有权和所有权依赖,以及追踪被标记为个人可识别信息的数据,帮助遵守GDPR。



3种类型的数据沿袭

1. 数据集沿袭
数据集沿袭追踪数据集之间的依赖关系

数据集沿袭的前提是要对数据集进行评估。例如,数据目录(Data Catalog)可以作为建立数据集脉络工具的一个良好起点。从这个目录中,可以建立数据集之间的依赖联系。事实上,一些表可以定义在其他表之上,或者一个仪表盘可以由来自不同数据库表或仓库视图的数据驱动。所有这些依赖关系都可以在沿袭世系图中找到。


2. job作业沿袭
作业沿袭Job Lineage 追踪产生数据集的作业的配置,以及它们的依赖关系

Job Lineage对所有与数据相关的资源进行编目,包括数据源和处理引擎,以及它们是如何联系在一起的。如果一个作业转换一个数据集以生成一个新的数据集,3个对象将出现在lineage图中:输入数据集、转换作业和输出数据集。

这里很重要的一点是,Job Lineage只关注作业的定义(静态),而不是它们的执行(动态)。静态分析已经允许人们发现作业将在哪些输入/输出数据集上行动。对这些作业执行的跟踪属于第三层的 "运行路线"。

注意:数据集的脉络和作业的脉络都可以收集在一个叫做静态脉络的类别中。它只是为了对数据资产的架构进行编目,而不是它们的动态执行方式。

3. 运行沿袭
动态运行沿袭跟踪产生数据集及其依赖关系的作业的运行。

这种类型的世系侧重于运行,即作业的执行。它也被称为运行沿袭。它是目前存在的最细化的沿袭世系类型,因为它跟踪运行进程的日常活动和它们的影响。如果确定了一个失败的运行,就很容易了解哪些表在上游受到影响。


注意:运行世系也可以被称为动态世系。