通过目录联邦,可以直接访问对象存储中的外部表。 查询仅使用 Databricks 计算执行,因此更具成本效益和性能优化。 目录联邦用于连接到具有目录服务和支持开放的表格式的平台,例如外部 Hive 元存储、旧版 Databricks Hive 元存储、Salesforce Data Cloud 和 Snowflake。
               
              
            
常见用例
常见用例包括:
- 作为 Unity Catalog 迁移路径中的一个步骤,启用无需修改代码的增量迁移,使某些工作负载仍可继续使用在外部目录中注册的数据,而将另外一些工作负载进行迁移。
- 为组织提供长期混合模型,这些组织必须与在 Unity 目录中注册的数据一起维护外部目录中的某些数据。
目录联合概述
使用目录联合功能,可以创建从 Databricks 工作区到您的外部目录的连接,Unity Catalog 会爬取外部目录以填充一个外部目录,有时称为联合目录,使您的组织能够在 Unity Catalog 中使用外部目录的表格,从而提供集中化的访问控制、数据血缘、搜索等功能。
Databricks 工作区外部的联合外部目录允许使用 Unity 目录进行读取。 内部 Hive 元存储允许读取和写入,并在修改元数据时,更新 Hive 元存储和 Unity Catalog 的元数据。
在联合外部目录中查询外表时,Unity Catalog 提供治理层,执行访问控制检查和审计等功能,而查询则使用外部目录语义来执行。 例如,如果用户查询在外部目录中以 Parquet 格式存储的表:
- Unity Catalog 检查用户是否有权访问表,并推断查询的世系。
- 查询本身针对基础外部目录运行,利用存储在那里的最新元数据和分区信息。
什么是授权路径?
创建由 Hive 元存储联合支持的外部目录时,系统会提示您提供授权路径,用于访问存储 Hive 元存储表的云存储。 要使用 Hive 元存储联合访问的任何表都必须包含在这些路径内。 Databricks 建议您将授权路径设为在大量表中常见的子路径。 例如,如果表格位于 s3://bucket/table1、s3://bucket/table2 和 s3://bucket/table3,则应提供 s3://bucket/ 作为授权路径。
授权路径为 Hive 元存储联合支持的外国目录添加额外的安全层。 它们使目录所有者能够将防护措施应用于用户可以使用联合访问的数据。 如果 Hive 元存储允许用户更新元数据并任意更改表位置,这样做可以避免这些更新自动同步到外部目录中。 在此应用场景中,用户有可能重新定义他们已有权访问的表,使其指向他们本来无权访问的新位置。
示例:不安全的 Hive 元存储
以下示例演示了一个恶意用户如何通过操控不安全的 Hive 元存储中的路径来绕过 Unity Catalog 的权限,并访问联合目录中的敏感数据。
管理员设置 Hive 元存储联合,并向 Paul 授予对 Unity 目录中架构 non_sensitive 的访问权限。 Paul 无权访问 Unity 目录中的 sensitive_table 架构。
               
              
            
尽管 Unity 目录是安全的,但 Hive 元存储不安全。 Paul 能够将 Hive 元存储中表 non_sensitive_table 的路径更改为 s3://abc/def。 在下一次刷新联合目录时,Unity 目录中联合表的路径将更新。 由于 Unity Catalog 已有访问s3://abc/def的存储凭据,并且 Paul 有SELECT的访问权,因此 Paul 现在可以从表sensitive_table中访问数据。
               
              
            
若要大规模添加授权路径,可以使用以下工具:
- Unity 目录迁移助手 内置辅助函数 
- 自动化工具(如 Terraform) 
- 以下笔记本中的预构建辅助函数: - 授权路径辅助函数