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 Spark 声明性管道工作负载中的列血统跟踪,需要使用 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 列会显示该列由哪些上游列派生而来:

    完整菜单列世系。

查看作业世系

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

查看仪表板世系

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

使用系统表查询世系

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

Permissions

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

数据沿袭会在附加到 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_lineagesystem.access.column_lineage)保留 1 年滚动数据窗口。 请参阅 世系系统表参考

局限性

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

  • 2024 年 9 月 1 日之前捕获的世系数据不可用。

  • 使用作业 API runs submit 请求或 spark submit 任务类型的作业在世系视图中不可用。 这些工作流仍会捕获表和列级别世系,但不会捕获指向作业运行的链接。

  • 对于重命名的目录、架构、表、视图或列,其血缘信息不会被保留。

  • 如果使用 Spark SQL 数据集检查点,则不会捕获血统。

  • 在大多数情况下,Unity 目录从 Lakeflow Spark 声明性管道捕获世系,但使用 PRIVATE 表的管道的覆盖不完整。

  • 弹性分布式数据集(RDD)不会在世系中捕获。

  • 全局临时视图不会在数据沿袭中捕获。

  • 事务 每次读取和写入时会生成数据血统信息。 即使事务回滚,世系事件也会保留。

  • system.information_schema 下的表不会在数据血缘中记录。

  • Unity Catalog 会尽可能将数据血缘捕获到列级别。 但在某些情况下无法捕获列级世系。 这些包括:

    • 如果源或目标被引用为路径,则无法捕获列世系(例如:select * from delta."s3://<bucket>/<path>")。 仅当源和目标都由表名引用时,才支持列关系(例如:select * from <catalog>.<schema>.<table>)。
    • 使用用户定义的函数(UDF),这可能会掩盖源列和目标列之间的映射。

其他资源