Snowflake 数据血缘跟踪

2025年7月29日 | 阅读13分钟

什么是数据血缘?

记录数据生命周期的技术称为数据血缘。它是一系列程序,帮助公司了解其数据的来源,以及数据如何在跨越系统和流程时进行组合、修改和处理。

通过数据血缘,企业可以保证他们使用的数据是可靠的、一致的,并且质量最高。组织使用专门为此目的设计的技术来追踪其数据的历史。例如,Snowflake 的客户可以访问名为 Horizon 的集成治理解决方案。

Snowflake data lineage tracking

追踪数据在其整个生命周期中的起源、旅程和修改的能力被称为数据血缘。它涉及了解数据从原始系统经过一系列操作和修改到最终目的地的旅程。数据血缘提供了对数据创建、捕获、修改和使用的深入理解。

为什么数据血缘如此重要?

数据血缘对于数据治理至关重要,因为它为企业提供了完全理解其数据所需的可见性和记录保存能力。此过程提供了必要的背景信息,使其成为创建和管理可靠数据管道的关键组成部分。

  • 确保数据质量:现代组织依赖来自多个来源的数据来实现其战略目标。
  • 减少技术债务:在数据治理方面走捷径通常意味着以后需要花费更多的时间和金钱来正确解决同一问题。
  • 监控数据随时间的变化:数据集不是静态资产。数据在使用过程中会被修改和转换。
  • 简化数据移动:数据迁移以数据血缘为指导,数据血缘提供了对数据流和依赖关系的全面理解。

使用 Snowflake Horizon 追踪您的数据血缘

Snowflake Horizon,该公司集成的治理解决方案,使您能够追踪您的数据血缘,并在数据云中提供统一的合规性、安全、隐私、互操作性和访问能力。通过添加更多认证并监控数据质量和血缘,组织可以实现更好的合规性。

Snowflake data lineage tracking

Snowflake 数据云提供了一种强大而有效的替代手动文档和传统数据血缘维护方法中经常涉及的复杂程序的方法。Snowflake 的云原生环境使得企业能够通过其内置功能立即记录、可视化和分析数据血缘。

  • 数据完整性和信任:数据血缘有助于解决数据冲突,检测任何数据质量问题,并确保数据完整性。
  • 数据生命周期管理:数据血缘在数据资产生命周期管理中起着至关重要的作用。它有助于企业定位不必要或冗余的数据,优化数据存储,并就数据存档和保留做出可辩护的决策。

传统的数据血缘方法

寻找数据的来源可能具有挑战性。传统的数据血缘追踪方法通常依赖于相关人员的专业知识和手动记录。这包括查阅相关人员创建的文档、数据库模式和 ETL 文档,与相关人员交谈以获取更多详细信息,或者从源头到目的地物理追踪某个数据。

为什么 Snowflake 最适合数据血缘

Snowflake 是一种云原生数据仓库技术,它能够分离计算和存储,提供按需付费定价和自主扩展。与传统的数据仓库解决方案相比,Snowflake 为企业数据架构领域提供了重要功能,包括数据共享、Snowpipe、Streams、Time-Travel 和原生数据血缘功能。

利用 Snowflake 的数据血缘功能

Snowflake 自动实现数据血缘功能是其最重要的功能。无需手动干预。SNOWFLAKE 数据库的 ACCOUNT_USAGE 结构生成 ACCESS_HISTORY 视图。(注意:只有企业版及以上账户才能访问 ACCESS_HISTORY 视图。)

访问的对象基础:一个 JSON 数组,其中包含运行查询所需的所有基本数据对象,包括存储过程、外部函数、列和 UDF。

  • OBJECTS_MODIFIED:JSON 数组 OBJECTS_MODIFIED 列出了查询的写入操作所关联的对象。
  • OBJECTS_MODIFIED_BY_DDL:OBJECTS_MODIFIED_BY_DDL 参数指定了在数据库、模式、表、视图和列上执行的 DDL 操作。
  • POLICIES_REFERENCED:提供有关应用于表的行访问策略和应用于列的屏蔽策略的信息,包括已建立在中间对象或列上的任何策略。

现在,我们只需要从 JSON 数组中提取所需的数据,因为 ACCESS_HISTORY 中的列是 JSON 格式的。通过运行以下查询,我们可以获得 DATA_LINEAGE_TEST 数据库上操作历史记录:

Snowflake data lineage tracking

如您所见,返回的五个赋值的顺序与完成顺序相同。更进一步,如果您需要实际运行的查询,您可以将 ACCESS_HISTORY 和 QUERY_HISTORY 视图(在同一模式下)关联起来。

Snowflake data lineage tracking

结果

Snowflake data lineage tracking

要查看任何给定 Snowflake 数据的血缘,您只需要回答这些基本问题。从这里开始,您可以使用您喜欢的 BI 工具或编程语言轻松构建供您的工程团队使用的仪表板。

数据血缘的优势

随着数据生态系统的不断扩大和复杂化,数据血缘变得比以往任何时候都更加重要。数据血缘已成为数据管理的基本组成部分,并且具有许多重要优势,例如:

  • 数据完整性:任何数据仓库系统,包括 Snowflake,都可能出现数据质量问题。然而,数据血缘可以帮助您的工程师通过快速有效地识别问题的根本原因来解决数据质量问题。
  • 更好的数据管理:Snowflake 的数据血缘帮助组织实施和维护数据治理。法规、准则和保障措施。通过追踪数据血缘,组织可以执行数据访问和安全策略,监控数据质量,并确保法规遵从性。
  • 变更管理和影响分析:组织可以通过利用 Snowflake 中的数据血缘来执行对数据结构、转换或流程的更改。它有助于识别可能受更改影响的报告、研究或下游系统,使组织能够高效地规划和管理更改,同时将风险和干扰降至最低。

为什么数据血缘很重要,它意味着什么?

所有数据都源于某个来源,无论是人类输入数字还是机器记录事件。当相同的数据到达目的地(例如反向 ETL 同步或 Sigma 仪表板)时,它可能采取多种不同的形式。在学术界,追踪数据在所有这些不同的阶段、转换和依赖关系中流动的过程被称为数据血缘或数据来源。

哪些仪表板和表现在依赖于 orders 表?那是下游血缘。当您将数据流中的所有实体加在一起时,就会创建一个端到端的血缘图。

Snowflake data lineage tracking

现在我们知道了 orders 表的上游和下游血缘,我们能做什么?血缘本身只是信息。然而,血缘在帮助数据工程师和分析工程师解决五类不同问题方面表现出色:

  • 数据治理:在优化安全态势的同时遵守法律要求。
  • 入职:入职是指帮助新的数据团队成员和数据消费者了解数据流。
  • 优化:优化是减少冗余或效率低下的数据基础设施的过程。
  • 两种血缘的故事:表级别和列级别的血缘

列级别血缘更像是街道级别的视图,而表级别血缘则像城市的整体地图。两者都对了解新城市的街道很有用,但它们的功能不同。表级别血缘解释了数据库中表之间的数据移动。可能只需要查找SELECT 语句的源表和目标表。

Snowflake data lineage tracking

在这种情况下,表级别血缘很简单:orders_summary 表是使用来自 orders 表的信息创建的。因此,如果 orders 表被删除,orders_summary 表将面临断开的依赖关系。对 orders 表的更改也会影响 orders_summary 表的修改。请记住,数据库中的视图就像表一样,拥有自己的血缘,包括表级别和列级别。视图的表级别血缘显示了信息如何从源表流入视图。它有助于理解哪些表为视图提供信息。

使用 Snowflake 的元数据进行数据血缘

我们讨论过的所有用例都可以从表级别血缘中受益,但它通常不够精细。例如,我们可能希望更改表的列并评估其后续影响。然而,由于表级别血缘不提供有关特定列的信息,如果我们仅依赖它,我们会高估影响。列级别血缘可以帮助解决这个问题。它通过展示单个列的用法和修改来提供更详细的信息。

主体依赖关系视角:宏观视角

结果是依赖于 orders 表的 Snowflake 对象列表。提取哪些视图依赖于某个表是最有用的用法之一,特别是如果您大量依赖视图。没有表到视图的关系,血缘就像一张没有州际公路的地图。

然而,我们血缘图的基本基础是 SQL 查询建立的表或列依赖关系,而 OBJECT_DEPENDENCIES 无法提供这些。它们是本地道路以及州际高速公路。我们将需要使用 ACCESS_HISTORY 视图。

Snowflake data lineage tracking

通过从此查询返回的 JSON 结果中提取每个查询的精确依赖关系,我们可以确定列到列依赖关系的整个图。最重要的是,这些依赖关系是由最终真相来源——Snowflake 的查询解析器——确定的。

请注意,并非所有客户端都可以访问 ACCESS_HISTORY,因为它需要企业版(或更高版本)。如果您有权访问此视图,您绝对应该尝试使用它。但是,如果我们无法访问 ACCESS_HISTORY,我们将不得不自行解释查询。

这分为几个级别:解释查询历史

Snowflake 中的 QUERY_HISTORY 视图是获取数据血缘的另一个强大工具。此视图包含您 Snowflake 环境中执行过的所有查询的历史信息。这些信息包括查询的 SQL 文本、执行它的用户、访问或更改的对象等。

用户查询历史记录(即他们进行过的所有查询的记录)可能有助于诊断特定于用户的问题或发现他们使用模式中的模式。会话级别的查询历史记录对于调试或性能分析一组特定的链接查询很有用,因为它仅包括在单个会话中执行的查询。

Snowflake data lineage tracking

会话级别的查询历史记录仅限于在单个会话中执行的查询,这对于特定一组相关查询的故障排除或性能分析很有用。仓库级别的查询历史记录提供由特定仓库运行的查询,这有助于理解仅限于特定范围、工具或上下文的查询。

构建一个能够处理不同仓库使用的各种 SQL 方言和扩展的全面 SQL 解析器是解决此问题的一种方法。使用像 ANTLR 这样的解析器生成器包,可以使用声明的语法将 SQL 语句转换为抽象语法树(AST)。构建列级别血缘需要理解 SQL 语句的各个组成部分之间的关系,而这种树结构使得这一切成为可能。

Snowflake data lineage tracking
  • 可以通过进一步的预处理来改进和规范化数据,这些预处理还可以删除任何表别名,并用适当限定的列名替换它们。
  • 然后,可以使用递归方法找到每列的血缘链,该方法基于收集到的血缘列表,直到找到语句中所有列级别的祖先。

内存转换的情况

假设在您的数据管道中,存在需要内存转换的情况。也许您正在使用 Pandas 或 Apache Spark 等数据处理框架对数据执行复杂的操作。这些更改可能包括机器学习技术、数据聚合、清理和重塑。

外部机制:场外表演者

同样,Snowflake 的元数据视图不包括在将数据加载到 Snowflake 之前修改数据的外部操作。例如,考虑一下您正在使用 AWS Kinesis 或 Apache Kafka 的情况,或者其他实时数据处理解决方案。在数据进入您的 Snowflake 表之前,这些系统可用于处理流数据、过滤、丰富或重新格式化数据。

仓库之前

在任何数据进入您的仓库之前很久,数据血缘就开始于您的数据基础设施的最开始。上传到仓库的电子表格、Kafka 事件流以及各种其他来源都可能是数据的来源。

仓库之后:包括反向 ETL 和 BI

一旦数据进入仓库,它就成为许多下游应用程序的基础。典型的用例包括使用 Looker、Sigma、Tableau 和 Mode 等商业智能 (BI) 技术来帮助相关人员做出数据驱动的决策。通过使用 Census 和 Hightouch 等反向 ETL 解决方案,数据正在被传输回操作工作流和工具。

这些工具对于数据分析、可视化和操作至关重要。因此,要了解组织内数据的完整范围以及后续更改的影响,就需要理解从仓库到这些工具中的基本元素(例如报告)的血缘。

然而,由于两个原因,将这些技术添加到数据血缘中会使事情更加复杂。首先,这些工具可能会发生更改,有时在仓库内部,有时在仓库外部。其次,转换和基本元素(如果可用)可能仅通过 API 提供。

Snowflake data lineage tracking

Tableau 和 PowerBI 等工具提供了解析密集型转换和清晰的血缘关系 API,这些 API 可以在转换前后运行,遵循类似的模式。由于 Sigma 和 Mode 等工具的转换是在原始 SQL 中描述的,因此我们可以重用为查询历史记录中的查询创建的血缘解析器,这使得它们稍微简单一些。

实体解析:连接数据血缘的线索

确保实体得到有效解析

实体解析存在困难。无法唯一标识实体、不一致的命名约定和模式更改都可能导致跨多个系统匹配实体变得困难。为了确保有效的实体解析,请遵循以下最佳实践:

  • 在整个数据流中使用一致的命名约定。
  • 监控模式更新,并确保您的血缘追踪能够反映这些更新。
  • 尽可能使用唯一的标识符。

存储血缘

前面的算法可用于获取同步、一次性使用的血缘快照。但是,为了在需要持久数据的更复杂工作流中使用血缘(例如了解血缘随时间的变化),则必须保留血缘信息。

数据库中的持久祖先

将血缘信息保存在数据库中对于实现对数据血缘的轻松访问至关重要。这包括在血缘图中记录数据库基础设施的关系、依赖关系和转换。

然而,像 Neo4j 这样的图数据库专门用于处理链接数据,这使得它们非常适合血缘数据。它们通过有效地表示和查询复杂的关系,使企业能够研究血缘模式并执行基于图的分析。图数据库可以轻松处理更大的血缘图,并且扩展性很好。但它们需要优化图结构并进行认真考虑。

Snowflake data lineage tracking

我曾在关系数据库和图数据库中存储过血缘信息,我认为对于许多数据生态系统来说,人机工程学比规模更重要。也就是说,除非你有成千上万甚至数百万个节点和边(这是完全可行的),否则性能可能相当。

在之上添加可视化层

使用可视化使数据血缘可操作至关重要。通过在保留的血缘数据之上添加可视化层,您可以创建清晰易懂的数据血缘图的视觉表示。以下是一些可能的选项:

  • 可视化工具:您可以使用像 Looker 和 Tableau 这样的程序轻松创建动态且引人注目的数据血缘可视化,您很可能已经拥有这些程序。
  • 桌面工具:为了可视化和分析复杂网络,桌面程序 Gephi 和 Cytoscape 被创建出来。这些工具包含高级布局算法、交互功能和自定义选项,并且在可视化具有复杂链接的大规模数据血缘图方面表现出色。
  • Web 参考:D3.js 和 Vis.js 等基于 Web 的可视化工具提供各种图形布局技术、交互控件和动画功能,使您能够创建令人兴奋且富有教育意义的数据血缘可视化,人们可以通过在线界面查看和探索。

当血缘不再相关时

您的数据生态系统会随着您的数据血缘而变化。当血缘信息变得不可靠或不必要时,将其弃用至关重要。

例如,每当更改表、列或转换时,都应将相关血缘标记为已弃用。这样做使用户能够确信他们正在处理当前且准确的血缘信息,从而有助于防止误解和错误。

Snowflake data lineage tracking

可以通过以下方式在 Snowflake 中实现数据血缘追踪:

  1. 利用外部工具
    为了提供全面的血缘追踪,Snowflake 可以与许多外部数据治理和数据血缘解决方案集成。为此,通常会使用 Collibra、Alation、Informatica、MANTA 和 Data.world 等程序。为了创建血缘图,它们会连接到 Snowflake 并自动解析元数据、SQL 脚本和转换逻辑。
  2. 信息模式和元数据表
    Snowflake 中的信息模式视图包含与表、列和依赖关系相关的信息。这些视图(例如 TABLES、COLUMNS 和 VIEW_DEPENDENCIES)可用于查看各种对象之间的关系。
    可以使用此数据生成自定义血缘追踪报告。
  3. 元数据管理和标记
    通过 Snowflake 对对象标记的支持,您可以维护元数据并为各种数据对象(包括表、列和视图)创建唯一的标记。这可以促进更简单的血缘追踪和组织。
    结合标记和 Snowflake 原生的 OBJECT_DEPENDENCIES 视图,可以查看多个对象之间的关系。
  4. 自动化血缘脚本
    使用 Snowflake 的存储过程或自定义 Python 或 SQL 脚本,您可以自动化血缘提取过程。这些脚本可以通过分析 QUERY_HISTORY 表来提供血缘信息和血缘图。
  5. 数据构建工具 (dbt) 的集成
    由于 dbt 可以在 Snowflake 中自动提供数据转换的文档和血缘图,因此它是在框架中进行数据转换的流行工具。
    dbt Cloud 或 dbt Core 的用户可以通过利用 dbt 提供的血缘可视化来理解数据流。

结论

总而言之,我们可以得出结论,尽管 Snowflake 本身缺少内置的、全面的数据血缘追踪功能,但它提供了许多可用于实现此功能的工具和集成。通过利用第三方数据治理工具、查询和访问历史记录、元数据视图、自定义脚本和数据连接器,组织可以在其 Snowflake 环境中成功建立和管理数据血缘。


下一主题Snowflake-tasks