在 Azure Databricks 中导入提供方并读取共享数据

作为 Azure Databricks 接收方,您可以从开放提供方导入凭据文件并读取共享的数据资产。 可以在目录资源管理器中查询共享数据或使用Python笔记本。

注释

如果数据是通过 Databricks-to-Databricks OpenSharing 向你共享的,则无需凭据文件即可访问数据,并且此页面不适用于你。 请改为参阅 读取使用 Databricks 到 Databricks OpenSharing 共享的数据(适用于接收方)

Requirements

团队成员必须下载数据提供程序共享的凭据文件,并使用安全通道与你共享该文件或文件位置。 请参阅 Open-to-Databricks 模型中的“获取访问权限”。

注释

存储桶和凭据权限(范围、有效期、只读或读写)由提供程序决定。 如果提供程序是 Azure Databricks 提供程序,则在安全出口网关(SEG)工作区中挂载开放共享时,会自动将该提供程序的存储桶加入出站访问允许列表。 对于非 Databricks 开放提供方,该存储桶不会自动添加到允许列表中。 在挂载之前验证提供程序。

导入提供程序并查询共享数据

本部分介绍如何导入提供程序以及如何在目录资源管理器或Python笔记本中查询共享数据:

  • 如果你的 Azure Databricks 工作区启用了 Unity Catalog,请在目录资源管理器中使用导入提供程序 UI。 无需存储或指定凭据文件即可执行以下作:

    • 只需点击按钮,即可从共享中创建目录。
    • 使用 Unity 目录访问控制授予对共享表的访问权限。
    • 使用标准 Unity 目录语法查询共享数据。
    • 将轮换凭据应用于现有提供程序对象,而无需重新创建目录。 请参阅轮换开放收件人的凭据
  • 如果你的 Azure Databricks 工作区未启用 Unity Catalog,请改为按照 Python 笔记本中的说明操作。

目录浏览器

需要的权限:元存储管理员或具有 CREATE PROVIDER Unity 目录元存储特权的用户。 若要根据共享创建目录,您需要具备 CREATE CATALOG 特权。

  1. 在 Azure Databricks 工作区中,单击 Data icon.Catalog打开目录资源管理器。

  2. 在“ 目录 ”窗格顶部,单击“ 齿轮”图标 ,然后选择 “OpenSharing”。 或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 与我共享 ”选项卡上,单击“ 安装共享”。

  4. 输入提供程序名称。 名称不能包含空格。

  5. 上传提供程序与你共享的凭据文件。 许多提供商都有自己的 OpenSharing 网络,你可以从中接收共享。 有关详细信息,请参阅特定提供程序的配置

  6. (可选)输入注释。

    直接从提供程序导入提供程序的凭据文件

  7. 单击导入

  8. 在“ 共享 ”选项卡上,单击共享行上的 “创建目录 ”,以从共享数据创建目录。

    有关使用 SQL 或 Databricks CLI 基于共享创建目录的信息,请参阅基于共享创建目录

  9. 授予对目录的访问权限。 请参阅 如何向团队提供共享数据? 以及 管理 OpenSharing 目录中架构、表和卷的权限

  10. 像读取在 Unity Catalog 中注册的任何数据对象一样读取共享数据对象。

    有关详细信息和示例,请参阅访问共享表或卷中的数据

Python

如果未为 Unity 目录启用工作区,请在Azure Databricks工作区中使用笔记本读取共享数据。 将凭据文件存储在Azure Databricks中,然后使用它向数据提供程序进行身份验证并读取共享数据。

注释

这些说明假设未为 Unity Catalog 启用 Azure Databricks 工作区。 如果使用 Unity Catalog,则从共享读取时无需指向凭据文件。 你可以读取共享表中的数据,就像从 Unity Catalog 中注册的任何表中读取一样。 Databricks 建议在目录资源管理器中使用“导入提供程序”界面,而不是按此处提供的说明操作。

首先将凭据文件存储为 Azure Databricks 工作区文件,以便团队中的用户可以访问共享数据。

  1. 若要在 Azure Databricks 工作区中导入凭据文件,请参阅 “导入文件”。
  2. 你可以通过单击“Kebab”菜单图标授予其他用户访问文件的权限。在文件旁边,然后单击“共享”(权限)。 输入应有权访问文件的 Azure Databricks 标识。 有关文件权限的详细信息,请参阅 文件 ACL

存储凭据文件后,请创建一个笔记本来列出和读取共享表。

  1. 在 Azure Databricks 工作区中,单击新建 > 笔记本。 有关 Azure Databricks 笔记本的详细信息,请参阅 Databricks 笔记本

  2. 安装delta-sharing连接器并使用 Python 或 pandasApache Spark 列出和读取共享表。 使用凭据文件的工作区路径(例如, /Workspace/Users/user.name@email.com/config.share)作为配置文件路径。 有关代码示例,请参阅 Pandas:读取共享数据和Apache Spark:读取共享数据

  3. 除了Python和 Apache Spark 命令,还可以使用 SQL 查询共享数据。 从共享表在工作区中创建本地表,然后查询本地表。 共享数据不存储或缓存在本地表中。 每次查询本地表时,你都会看到共享数据的当前状态。

    替换变量,如下所示:

    • <local-table-name>:本地表的名称。
    • <profile-path>:凭据文件的位置。
    • <share-name>:表的 share= 的值。
    • <schema-name>:表的 schema= 的值。
    • <table-name>:表的 name= 的值。
    %sql
    DROP TABLE IF EXISTS <local-table-name>;
    
    CREATE TABLE <local-table-name> USING deltaSharing LOCATION "<profile-path>#<share-name>.<schema-name>.<table-name>";
    
    SELECT * FROM <local-table-name> LIMIT 10;
    
  4. 运行该命令时,将直接查询共享数据。 作为测试,查询该表并返回前 10 个结果。

  5. 如果输出为空或不包含预期的数据,请与数据提供者联系。

OpenSharing Python 连接器限制适用。 请参阅 OpenSharing Python 连接器限制

Limitations

Open 到 Databricks 的共享基于 OpenSharing 协议。 将开放提供程序导入 Azure Databricks 时,以下支持适用:

  • 仅支持 Delta Sharing 协议的 Delta 表。 不支持仅限 Iceberg 的表。
  • 支持预签名 URL 和 基于目录的云端令牌访问。 当提供商提供云令牌访问时,Azure Databricks首选云令牌访问。
  • 仅支持以下云令牌存储方案:s3、、、s3as3nabfsswasbsgsr2

若要从外部源读取非 Delta 数据(如 Iceberg、CSV、Parquet 或 JSON),请改用 Lakehouse 联邦。 请参阅 “连接到外部数据库和目录”。