管理数据接收者的Delta Sharing提供商

本页介绍如何使用 Unity Catalog 以获取有关通过 Delta Sharing 与您共享数据的数据提供者的信息。 其中还将介绍提供程序对象是什么,以及何时可能需要在 Unity Catalog 元存储中创建提供程序对象(大多数接收者永远不需要执行此任务)。

重要

数据收件人必须有权访问已启用 Unity 目录 的 Databricks 工作区,才能使用所述的功能。 此页面不适用于未启用 Unity 目录的工作区的收件人。

收件人是否需要创建提供程序对象?

在 Delta Sharing on Databricks 中,术语“提供者”既可以表示与你共享数据的组织,也可以表示接收者的 Unity Catalog 元存储中代表该组织的安全对象。 如果该安全对象存在于接收者的 Unity Catalog 元存储中,则接收者可以使用 Unity Catalog 管理其团队对共享数据的访问

作为有权访问 Unity Catalog 元存储的收件人,您通常不需要创建提供商对象。 这是因为应使用 Databricks 到 Databricks 共享与你共享数据,提供者对象会在你的 Unity Catalog 元存储中自动创建。

注意

如果您接收的数据是从未启用 Unity Catalog 的 Databricks 工作区的提供程序处获取的,则可以使用 Catalog Explorer 来导入该提供程序的凭据文件。 请参阅 Azure Databricks:使用开放共享连接器读取共享数据。

开始之前

若要管理 Azure Databricks 工作区中的提供程序,请执行以下操作:

  • 你的工作区必须启用 Unity Catalog。
  • 若要查看该提供程序,你必须是元存储管理员,或者元存储管理员必须授予你 USE PROVIDER 权限。
  • 若要创建提供程序,你必须是元存储管理员,或者元存储管理员必须授予你 CREATE PROVIDER 权限。
  • 若要更新提供程序,你必须是提供程序对象的所有者并拥有 CREATE PROVIDER 权限。 有关详细信息,请参阅更新提供程序(重命名、更改所有者、评论)

因此,如果工作区已在没有元存储管理员的情况下创建,则必须先由 Azure Databricks 帐户管理员授予用户或组元存储管理员角色,然后你才能在 Azure Databricks 中使用提供程序对象。 请参阅自动启用 Unity Catalog(可选)分配元存储管理员角色

查看提供方

若要查看可用的数据提供者列表,可以使用目录资源管理器、Databricks Unity Catalog CLI,或者 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SHOW PROVIDERS SQL 命令。

所需权限:必须具有 USE PROVIDER 权限,才能查看元存储中的所有提供者。 其他用户只能访问他们自己拥有的提供者。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“ 与我共享 ”选项卡上,查看与组织共享的所有数据。 对于每个股份,提供以下详细信息:

    • 名字: 提供程序指定的组织名称。
    • 身份验证类型: 提供程序使用的共享方法。
    • 所有者: 提供商的名称或电子邮件。
    • 创建时间: 创建共享的日期和时间。
    • 描述: 共享的描述。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。 (可选)将 <pattern> 替换为 LIKE 谓词

SHOW PROVIDERS [LIKE <pattern>];

有关更多详细信息 SHOW PROVIDERS,请参阅 SHOW PROVIDERS

CLI

使用 Databricks CLI 运行以下命令。

databricks providers list

查看供应商详细信息

若要查看有关提供者的详细信息,可以使用目录资源管理器、Databricks Unity Catalog CLI,或者 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 DESCRIBE PROVIDER SQL 命令。

所需权限:元存储管理员、具有 权限的用户,或提供者对象所有者。

详细信息包括:

  • 供应商已分享的项目(参阅查看供应商与您分享的项目)。
  • 提供者的创建者、创建时间戳、注释和身份验证类型(TOKENDATABRICKS)。 TOKEN 表示使用 Delta Sharing 开放共享协议与你共享了数据的提供程序。 DATABRICKS 表示使用 Databricks 与 Databricks 共享协议向你共享数据的数据提供者。
  • 如果提供者使用 Databricks 对 Databricks 的共享:提供者的 Unity Catalog 元存储的云环境、区域和元存储 ID。
  • 如果提供程序使用开放共享:您的接收者配置文件终结点,即为托管 Delta Sharing 服务器的位置。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“与我共享”选项卡上,查找并选择共享者

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。

DESC PROVIDER <provider-name>;

要了解更多详细信息 DESC PROVIDER,请参阅 DESCRIBE PROVIDER

CLI

使用 Databricks CLI 运行以下命令。

databricks providers get <provider-name>

查看提供方与你共享的资源

若要查看提供者与你共享的共享,可以使用目录资源管理器、Databricks Unity Catalog CLI,或者 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SHOW SHARES IN PROVIDER SQL 命令。

所需权限:元存储管理员、具有 权限的用户,或提供者对象所有者。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“与我共享”选项卡上,查找并选择共享者

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。 (可选)将 <pattern> 替换为 LIKE 谓词

SHOW SHARES IN PROVIDER [LIKE <pattern>];

要了解SHOW SHARES IN PROVIDER的更多详细信息,请参阅在提供商中显示共享

CLI

使用 Databricks CLI 运行以下命令。

 databricks providers list-shares <provider-name>

更新提供程序(重命名、更改所有者、注释)

可以使用目录资源管理器、Databricks Unity Catalog CLI 或者 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 ALTER PROVIDER SQL 命令来修改 Unity Catalog 元存储中的提供者对象:

  • 重命名提供程序以修改用户在其 Databricks 界面中查看提供程序对象的方式。
  • 更改提供程序对象的所有者。
  • 添加或修改注释。

所需权限:您必须是提供程序对象的现有所有者才能更新所有权信息。 必须是元存储管理员(或拥有 CREATE PROVIDER 特权的用户)并且是服务提供者所有者,才可以更新提供者名称。 必须是所有者才能更新评论。 初始所有者是元存储管理员。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“与我共享”选项卡上,查找并选择共享者

  4. 在详细信息页上,更新所有者、评论或服务提供者名称。

    若要重命名提供程序,请单击 Kebab 菜单图标。 烤肉串菜单,然后选择“ 重命名”。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。

ALTER PROVIDER <provider-name> RENAME TO <new-provider-name>
OWNER TO <new-owner>
COMMENT "<comment>";

如需了解更多详细信息 ALTER PROVIDER,请参阅 ALTER PROVIDER

CLI

使用 Databricks CLI 运行以下命令。 请将 <provider-name> 替换为当前提供程序名称,并将 <new-provider-name> 替换为新名称。

databricks providers update <provider-name> /
--new-name <new-provider-name> /
--comment "<new comment>" /
--owner <new-owner-name>

为有权限的用户轮换凭据

本部分适用于具有身份验证类型为TOKENOAUTH_CLIENT_CREDENTIALSOIDC_FEDERATION的提供程序对象。 Databricks 到 Databricks 提供程序(身份验证类型 DATABRICKS)会自动轮换。 例如,如果使用 delta-sharing Python 或 Spark 连接器访问没有提供程序对象的数据,请在连接器配置中应用新的凭据文件。 请参阅 使用 Delta Sharing 和持有者令牌的开放共享读取数据

使用开放共享协议的提供程序可以轮换持有者令牌,并向你发送新的凭据文件。 发生这种情况时,请使用 Databricks REST API 更新提供程序对象。 不要删除并重新创建提供程序以应用新凭据。 目录绑定到提供程序的内部 ID,而不是其名称。 重新创建具有相同名称的提供程序会中断目录与共享数据的连接。

ALTER PROVIDER、Databricks CLI 和目录资源管理器不支持更新提供程序凭据。

更新凭据

使用 PATCH 字段中新凭据文件 recipient_profile_str 的内容向提供程序终结点发送请求。

所需的权限:提供程序对象所有者或元存储管理员。

Python

在收件人工作区的笔记本中运行以下命令。 将 <provider-name> 替换为您元存储中的提供程序对象的名称,并将 new_profile 更新为新凭据文件中的值。

import json
import requests

new_profile = {
    "shareCredentialsVersion": 1,
    "bearerToken": "<new-bearer-token>",
    "endpoint": "https://<provider-workspace>.cloud.databricks.com/api/2.0/delta-sharing/metastores/<metastore-id>",
}

token = (
    dbutils.notebook.entry_point.getDbutils()
    .notebook()
    .getContext()
    .apiToken()
    .get()
)
workspace_url = spark.conf.get("spark.databricks.workspaceUrl")

response = requests.patch(
    f"https://{workspace_url}/api/2.1/unity-catalog/providers/<provider-name>",
    headers={
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    },
    json={"recipient_profile_str": json.dumps(new_profile)},
)

print(response.status_code)
print(response.json())

curl

curl --request PATCH \
  --header "Authorization: Bearer $DATABRICKS_TOKEN" \
  --header "Content-Type: application/json" \
  --url "https://<databricks-instance>/api/2.1/unity-catalog/providers/<provider-name>" \
  --data '{
    "recipient_profile_str": "<contents of the new credential file>"
  }'

成功完成的轮换返回以下响应,其中包含提供程序的更新元数据。

{
  "name": "<provider-name>",
  "authentication_type": "TOKEN",
  "owner": "user@example.com",
  "recipient_profile": {
    "share_credentials_version": 1,
    "endpoint": "https://<provider-workspace>.cloud.databricks.com/api/2.0/delta-sharing/metastores/<metastore-id>"
  },
  "updated_at": 1775804332820,
  "updated_by": "user@example.com",
  "id": "abcd2a5b-c18e-46eb-ae11-3056cfe99bef"
}

有关详细信息,请参阅 更新提供程序 REST API。

验证旋转

确认目录、架构和表仍可访问。 目录名称应与轮换前相同。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“ 与我共享 ”选项卡上,找到你的提供商。

以前的错误提示应该消失,并且共享资源应再次列出。 列出的目录应与之前相同。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下 SQL。

-- The catalog name should match what it was before rotation
SHOW CATALOGS;

-- Schemas in the shared catalog should still appear
SHOW SCHEMAS IN <catalog-name>;

-- Tables should still appear
SHOW TABLES IN <catalog-name>.<schema-name>;

-- A read from a shared table should return data
SELECT * FROM <catalog-name>.<schema-name>.<table-name> LIMIT 10;

如果查询成功,则轮换已完成,所有现有查询、作业和仪表板将继续工作。

故障排除

Error 修复
请求返回 403 Forbidden 您必须是提供程序的所有者或元存储管理员才能更换凭据。 要求元存储管理员应用轮换或转让所有权。 请参阅更新共享
请求返回 404 Not Found 提供程序名称不正确。 运行 SHOW PROVIDERS 以列出元存储中的确切名称。
请求返回 400 Bad Request,消息:“无法更新接收者个人资料” API 仅更新TOKENOAUTH_CLIENT_CREDENTIALSOIDC_FEDERATION提供商的凭据。 对于 Databricks 到 Databricks 共享,凭据会自动轮换。
查询返回 TABLE_OR_VIEW_NOT_FOUND 目录名称可能不正确,或者目录到提供程序绑定可能已损坏。 运行 SHOW CATALOGSSHOW SCHEMAS IN <catalog-name> 确认目录是否存在。
目录浏览器在成功 PATCH 后显示陈旧的数据或错误。 在轮换之前,你会看到缓存的结果。 刷新页面或等待几分钟。

删除提供者

若要删除提供程序,可以在Azure Databricks笔记本或 Databricks SQL 查询编辑器中使用目录资源管理器、Databricks CLI 或 DROP PROVIDER SQL 命令。 您必须是提供者对象的拥有者才能删除该提供者。

删除某个提供程序后,你和组织中的用户(接收者)将不再可以访问该提供程序共享的数据。

所需的权限:提供程序对象所有者。

目录浏览器

  1. 在 Azure Databricks 工作区中,单击 “数据”图标。目录

  2. 目录窗格顶部,单击齿轮图标并选择“增量共享”

    或者,在右上角,单击分享 Delta Sharing

  3. 在“与我共享”选项卡上,查找并选择共享者

  4. 单击 “Kebab”菜单图标。 烤肉串菜单,然后选择“ 删除”。

  5. 在确认对话框中,单击“删除”。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。

DROP PROVIDER [IF EXISTS] <provider-name>;

有关DROP PROVIDER的更多详细信息,请参阅DROP PROVIDER

CLI

使用 Databricks CLI 运行以下命令。

databricks providers delete <provider-name>

如果操作成功,则不返回任何结果。