Unity 目录中的世系

数据世系显示 Azure Databricks 中的数据来自何处以及流向何处:哪些查询和文件将数据写入表中,哪些作业和笔记本对其进行转换,以及哪些仪表板使用这些结果。

Unity Catalog 会自动捕获在 Azure Databricks 上运行的查询的数据沿袭,精确到列级别,并在附加到元存储的所有工作区之间对这些沿袭信息进行汇总。 Unity 目录中的世系使你可以:

  • 进行影响分析:在更改或删除表或列之前,请识别出依赖于这些对象的下游表、作业和仪表板。
  • 调查根本原因:当下游报表显示意外结果时,跟踪上游源以查找数据分歧的位置。
  • 跟踪敏感数据流:有关合规性审核,请参阅受管制数据的来源、转换方式以及哪些下游资产使用它。
  • 了解跨团队依赖关系:找出哪些团队负责你所依赖的上游数据源,或者哪些团队使用你的数据表。

外部世系将世系图扩展到Azure Databricks之外。 在 Unity 目录中将上游源(如 Salesforce 或 MySQL)和下游工具(如 Tableau 或Power BI)注册为外部资产,它们与单个图中的 Unity 目录表一起显示。 请参阅 外部血缘。

下图是一个示例世系图。 节点可以表示表和视图、ML 模型版本、外部资产和文件路径。

世系概述。

要求

如要使用 Unity Catalog 跟踪数据世系,请采取以下做法:

  • 表必须已在 Unity Catalog 元数据存储中注册。
  • 外部资产(未在 Unity Catalog 元存储中注册的资产)必须添加为 Unity Catalog 中的外部元数据对象,配置与在 Unity Catalog 元存储中注册的其他可安全控制的对象建立关系。 请参阅 外部血缘。
  • 查询必须使用 Spark DataFrame(例如,返回 DataFrame 的 Spark SQL 函数)或 Databricks SQL 接口(例如 Notebooks 或 SQL 查询编辑器)。

查看数据世系:

  • 必须至少对表或视图的父目录具有 BROWSE 权限。 父目录必须能够从工作区访问。 请参阅 工作区目录绑定。
  • 对于笔记本、作业或仪表板,必须具有工作区中访问控制设置定义的这些对象的权限。 有关详细信息,请参阅权限。
  • 对于 已启用 Unity 目录功能的流水线,您必须拥有该流水线的 CAN VIEW 权限。

计算要求:

  • 进行Delta表之间流式传输的链路跟踪需要Databricks Runtime 11.3 LTS或更高版本。
  • Lakeflow 管道工作负载的列级沿袭跟踪需要 Databricks Runtime 13.3 LTS 或更高版本。

网络要求:

  • 可能需要更新出站防火墙规则,以允许连接到Azure Databricks控制平面中的事件中心终结点。 ** 如果您的 Azure Databricks 工作区部署在您自己的 VNet 中(也称为 VNet 注入),则通常适用。 若要获取适用于你的工作区区域的事件中心终结点,请参阅元存储、项目 Blob 存储、系统表存储、日志 Blob 存储和事件中心终结点 IP 地址。 有关为Azure Databricks设置用户定义的路由(UDR)的信息,请参阅 Azure Databricks。

在目录资源管理器中查看血缘关系

如要使用目录资源管理器查看表世系,请采取以下做法:

  1. 在Azure Databricks工作区中,单击Data icon.Catalog。

  2. 搜索或浏览表。

  3. 选择“ 世系 ”选项卡。世系面板随即显示并显示相关表。

  4. 若要查看数据世系的交互式图形,请单击“查看世系图形”。

    默认情况下,图形中显示一个级别。 单击节点上的 加号图标 图标以显示更多连接(如果可用)。

  5. 单击世系图中连接边缘上的图标,打开 世系详细信息 面板。

    “ 世系详细信息 ”面板显示有关连接的详细信息,包括源表和目标表。

    世系图。

  6. 若要查看与表关联的资产,请在 “世系详细信息 ”面板中选择该资产。 可以按笔记本、作业、管道和查询进行筛选。

  7. 若要查看列级世系,请单击图形中的列以显示指向相关列的链接。 例如,单击此示例图中的 revenue 列会显示该列由哪些上游列派生而来:

    完整菜单列世系。

查看作业世系

若要查看作业世系,请转到表的世系选项卡,选择作业,然后选择下游。 作业名称以表的使用者身份显示在作业名称下。

查看仪表板世系

若要查看仪表板世系,请转到表的“世系”选项卡,然后单击“仪表板”。 仪表板会作为表的使用者出现在“仪表板名称”下。

查看UDF谱系

利用 UDF 血缘跟踪 Unity Catalog 中的用户定义函数(UDF)在何处被使用,以便在进行任何更改之前评估修改共享 UDF 可能带来的影响。 UDF 沿袭关系会跟踪调用 UDF 的工作负载(例如作业、流水线、笔记本或 SQL 查询),以及在其定义中引用该 UDF 的数据资产。 Unity Catalog 可捕获 SQL、Python 和 Scala UDF 的沿袭关系。

查看UDF的谱系:

  1. 在Azure Databricks工作区中,单击Data icon.Catalog。
  2. 搜索或浏览该功能。
  3. 选择“ 血统 ”标签。标签列出与UDF连接的资产,以及每个资产的 方向、 类型和 最后活动。

以下示例展示了UDF的udf_demo.default.normalize_email“血统”标签。 下游资产包括 customer_profiles_view 表、调用函数的查询和笔记本,以及执行该函数的作业。

目录资源管理器中 UDF 的沿袭选项卡。

用于在表或视图之间转换数据的UDF也会被捕捉到系谱图中。 在下例中,customers表与视图之间的边的customer_profiles_view面板列出了转换数据的normalize_email UDF:

谱系图的谱系详情面板中显示的UDF。

除了一般数据血缘限制外,UDF 血缘还有以下限制:

  • Unity 目录在表格层面捕捉 UDF 的血脉。 列级UDF谱系不被捕获。
  • SQL UDF不会从 INSERT、 UPDATE和 MERGE 语句中捕获。
  • 对于在UDF主体中引用的表或函数,不捕捉沿革。
  • 表值函数、机器学习函数和特征规范函数不被捕捉到谱系中。
  • 你不能使用血统系统表查询UDF血统。

使用系统表查询世系

可使用世系系统表以编程方式查询世系数据。 有关详细说明,请参阅 系统表参考 和 世系系统表参考。

注释

Unity 目录 UDF 的谱系在谱系系统表中不可用。 参见 查看UDF谱系。

Permissions

世系图形的权限模型与 Unity Catalog 相同。 在 Unity Catalog 元存储中注册的表和其他数据对象仅对至少具有对这些对象的 BROWSE 权限的用户可见。 如果用户对表没有 BROWSE 或 SELECT 特权,则无法浏览其世系。

数据沿袭会在附加到 Unity Catalog 元存储的所有工作区之间汇总,因此,只要用户拥有相应的对象权限,在某个工作区中捕获的数据沿袭就会显示在共享该元存储的任何其他工作区中。 有关工作区级别对象(如其他工作区中的笔记本和仪表板)的详细信息将被屏蔽。 请参阅限制。

例如,针对 userA运行以下命令:

GRANT USE SCHEMA on lineage_data.lineagedemo to `userA@company.com`;
GRANT SELECT on lineage_data.lineagedemo.menu to `userA@company.com`;

当userA查看lineage_data.lineagedemo.menu表的世系图时,他们会看到menu表。 它们看不到有关关联表的信息,例如下游 lineage_data.lineagedemo.dinner 表。 该 dinner 表对 masked 显示为 userA 节点,并且 userA 无法展开图谱来查看其无权访问的表的下游表。

如果运行以下命令将 BROWSE 权限授予 userB,则该用户可以查看 lineage_data 架构中任何表的世系图。

GRANT BROWSE on lineage_data to `userB@company.com`;

世系用户还必须具有查看工作区对象(如笔记本、作业和仪表板)的特定权限。 有关这些对象的详细信息仅在创建对象的工作区中可见。

若要详细了解如何在 Unity Catalog 中管理对安全对象的访问,请参阅管理 Unity Catalog 中的特权。 若要详细了解如何管理对工作区对象(例如笔记本、作业、仪表板)的访问,请参阅访问控制列表。

Retention

目录资源管理器中显示的世系数据无限期保留。 2024 年 9 月 1 日之后捕获的所有世系数据都可用。 对于在该日期之后创建的元存储,目录资源管理器在世系时间范围下拉列表中包含 “所有时间 ”选项。 对于较旧的元存储,下拉列表包含一个从 2024 年 9 月 1 日开始的所有可用选项。 默认选择为 1 年。

血缘系统表(system.access.table_lineage 和 system.access.column_lineage)保留 1 年滚动数据窗口。 请参阅 世系系统表参考。

局限性

数据世系具有以下限制。 这些限制也适用于世系系统表:

  • 2024 年 9 月 1 日之前捕获的世系数据不可用。
  • 使用作业 API runs submit 请求或 spark submit 任务类型的作业在世系视图中不可用。 这些工作流仍会捕获表和列级别世系,但不会捕获指向作业运行的链接。
  • 对于重命名的目录、架构、表、视图或列,其血缘信息不会被保留。
  • 如果使用 Spark SQL 数据集检查点,则不会捕获血统。
  • 在大多数情况下,Unity Catalog 可以捕获来自 Lakeflow 管道的沿袭关系,但对于使用 PRIVATE 表 的管道,其覆盖范围并不完整。
  • 弹性分布式数据集(RDD)不会在世系中捕获。
  • 全局临时视图不会在数据沿袭中捕获。
  • 事务 每次读取和写入时会生成数据血统信息。 即使事务回滚,世系事件也会保留。
  • system.information_schema 下的表不会在数据血缘中记录。
  • Unity Catalog 会尽可能将数据血缘捕获到列级别。 但在某些情况下无法捕获列级世系。 其中包括:
    • 如果源或目标被引用为路径,则无法捕获列世系(例如:select * from delta."s3://<bucket>/<path>")。 仅当源和目标都由表名引用时,才支持列关系(例如:select * from <catalog>.<schema>.<table>)。
    • 使用用户自定义函数(UDF)可能会模糊源列和目标列之间的映射。 Unity Catalog 可捕获 UDF 的表级血缘,但不捕获列级 UDF 血缘。 参见 查看UDF谱系。

其他资源