为 OpenSharing 创建共享

此页面介绍如何为 OpenSharing 创建共享。

共享是 Unity 目录中的安全对象,用于与一个或多个收件人共享以下数据资产:

如果共享整个架构(数据库),接收者可以在共享架构时访问架构中的所有表、流式处理表、视图、具体化视图、模型和卷,以及将来添加到架构中的任何数据和 AI 资产。

一个共享只能包含一个 Unity Catalog 元存储中的数据和 AI 资产。 可随时添加或删除共享中的数据和 AI 资产。

在创建共享之前,请先确认您已为您的账户设置 OpenSharing(适用于提供商)

若要了解有关共享模型的详细信息,请参阅 共享、提供商和收件人

要求

检查是否满足要完成的每个任务的列出的要求。

小窍门

向共享添加数据资产时,Databricks 建议使用组作为共享所有者。

任务 要求
创建共享
  • 拥有在其中注册了您要共享的数据的 Unity Catalog 元存储特权。
  • 使用附加了 Unity Catalog 元存储库的 Azure Databricks 工作区创建共享。
将以下内容添加到共享:
  • Tables
  • 流式处理表
  • 托管 Iceberg 表
  • 外表
  • 外国冰山表
  • Views
  • 实例化视图
  • 成为股份所有者。
  • 在包含数据资产的目录和架构上具有USE CATALOGUSE SCHEMA权限。
  • SELECT 数据资产具有特权。 必须保留该权限,以便资产继续共享。 如果您丢失了该资产,则收件人无法通过共享访问该资产。
共享整个模式或外部模式
  • 成为共享所有者和架构所有者,或者具有USE SCHEMA
  • 在架构上启用 SELECT 以共享表。
  • 在架构上具有 READ VOLUME 才能共享卷。
将存储卷添加到共享资源
  • 成为股份所有者。
  • 对包含卷的目录和架构具有 USE CATALOGUSE SCHEMA 特权,或者拥有目录或架构的所有权。
  • 对存储卷具有特权 READ VOLUME。 你必须保留该权限,以便继续共享该卷。 如果丢失密钥,收件人将无法通过共享访问该卷。
将 Python UDF 添加到共享
  • 成为股份所有者。
  • 对包含 Python UDF 的目录或架构拥有 USE CATALOGUSE SCHEMA 权限,或拥有目录或架构的所有权。
  • 拥有 Python UDF 的 EXECUTE 权限。 必须保留该权限,以便 Python UDF 继续共享。 如果您丢失它,收件人将无法通过共享访问 Python UDF。
将模型添加到共享文件夹
  • 成为股份所有者。
  • 对包含模型的目录和架构具有 USE CATALOGUSE SCHEMA 特权,或者拥有目录或架构的所有权。
  • 对模型具有 EXECUTE 特权。 必须保留该特权才能继续共享模型。 如果丢失它,收件人将无法通过共享访问该模型。
将笔记本文件添加到共享
  • 是共享所有者,对笔记本具有 CAN READ 权限。

计算要求

  • 如果使用 Databricks 笔记本创建共享,则计算资源必须使用 Databricks Runtime 11.3 LTS 或更高版本,并且具有标准或专用访问模式(以前共享和单个用户)。
  • 如果使用 SQL 声明向共享添加架构(或者更新或删除架构),则必须使用运行 Databricks Runtime 13.3 LTS 或更高版本的 SQL 仓库或计算。 使用目录资源管理器执行相同操作没有计算要求。

创建共享对象

在创建共享对象之前,请检查是否满足 要求

若要创建共享,请使用目录资源管理器、Databricks Unity 目录 CLI 或 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 CREATE SHARE SQL 命令。

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,单击“ 共享数据 ”按钮。

  4. 在“创建共享”页上,输入共享名称和可选注释。

  5. 单击“保存并继续”。

    可以继续添加数据资产,也可以停止并稍后返回。

  6. 在“ 添加数据资产 ”选项卡上,选择要共享的数据资产。

    有关详细说明、其他要求和相关限制,请参阅:

  7. 单击“保存并继续”。

  8. 在“添加笔记本”选项卡上,选择要共享的笔记本。

    有关详细说明,请参阅将笔记本文件添加到共享

  9. 单击“保存并继续”。

  10. “添加收件人 ”选项卡上,选择要与之共享的收件人。

    有关详细说明,请参阅 管理对 OpenSharing 数据共享(对于提供程序)的访问权限

  11. 单击“共享数据”以与收件人共享数据。

    如果尚未创建收件人,请单击“ 共享数据”,创建收件人,然后授予他们访问权限。

SQL

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

CREATE SHARE [IF NOT EXISTS] <share-name>
[COMMENT "<comment>"];

现在可以向共享添加表、流式处理表、卷、视图、具体化视图和模型。

有关详细说明、其他要求和相关限制,请参阅:

CLI

使用 Databricks CLI 运行以下命令。

databricks shares create <share-name>

可以使用 --comment 添加注释或用 --json 向共享添加资产。 有关详细信息,请参阅以下部分。

现在可以向共享添加表、流式处理表、卷、视图、具体化视图和模型。

有关详细说明、其他要求和相关限制,请参阅:

向共享添加表

在将表添加到共享之前,请检查是否符合 要求

如果你是工作区管理员,并且继承了对包含工作区管理员组中表的架构和目录的 USE SCHEMAUSE CATALOG 权限,则无法将表添加到共享。 必须先向自己授予对架构和目录的 USE SCHEMAUSE CATALOG 权限。

注释

2024 年 7 月 25 日或之后,表注释、列注释和主键约束包含在使用 Databricks 到 Databricks 共享方式与接收者分享的共享中。 如果您希望在发布日期之前,通过已经与收件人共享的共享来开始共享注释和约束,则必须撤销并重新授予收件人访问权限,以触发注释和约束的共享。

若要将表添加到共享,请使用目录资源管理器、Databricks Unity 目录 CLI 或 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SQL 命令。

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加表的共享并单击其名称。 可以添加启用了 行跟踪 的表。 收件人可以查询行跟踪列。

  4. 单击“管理资产 > 编辑资产”。

  5. “编辑资产 ”页上,选择整个架构(数据库)或单个表。

    • 若要选择表,请先选择目录,然后选择包含表的架构,然后选择表本身。

      可以使用工作区搜索,按名称、列名或注释来搜索表。 请参阅 “搜索工作区对象”。

    • 若要选择架构,先选择目录,然后选择架构。

      有关共享架构的详细信息,请参阅向共享添加架构

  6. 历史记录:共享表历史记录,以允许收件人执行时间旅行查询、使用 Spark 结构化流式处理读取表或运行 事务。 对于 Databricks 到 Databricks 共享,还会共享表的 Delta 日志来提升性能。 请参阅使用历史记录共享改善表读取性能。 历史记录共享需要 Databricks Runtime 12.2 LTS 或更高版本。

    注释

    如果还希望客户能够使用 table_changes() 函数查询表的更改数据馈送(CDF),则必须在共享WITH HISTORY表之前对表启用 CDF。

  7. (可选)单击 “语音气泡加”图标。“别名 ”或 “分区” 列下添加别名或分区。 如果选择整个架构,则别名和分区功能不可用。 如果选择整个架构,则默认包含表历史记录。

  8. 单击“ 保存”。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令来添加表:

ALTER SHARE <share-name> ADD TABLE <catalog-name>.<schema-name>.<table-name>  [COMMENT "<comment>"]
   [PARTITION(<clause>)] [AS <alias>]
   [WITH HISTORY | WITHOUT HISTORY];

运行以下命令来添加整个架构。 ADD SCHEMA 命令要求 SQL 仓库或计算都需运行 Databricks Runtime 13.3 LTS 或更高版本。 有关共享架构的详细信息,请参阅向共享添加架构

ALTER SHARE <share-name> ADD SCHEMA <catalog-name>.<schema-name>
[COMMENT "<comment>"];

选项包括以下内容。 如果选择整个架构,则 PARTITIONAS <alias> 不可用。

  • PARTITION(<clause>):如果只想共享表的一部分,可以指定分区。 例如, (column = 'value') 请参阅 “指定要共享的表分区 ”和 “使用收件人属性执行分区筛选”。

  • AS <alias>:备用表名或别名,使表名更具可读性。 别名是接收者明白且必须在查询中使用的表名称。 如果指定了别名,则收件人不能使用实际表名。 使用 <schema-name>.<table-name> 格式。

  • WITH HISTORYWITHOUT HISTORY:当 WITH HISTORY 被指定时,与完整历史记录共享该表,使接收方能够进行时间旅行查询、流式读取和运行 事务。 对于 Databricks 到 Databricks 共享,历史记录共享还会共享表的 Delta 日志来提升性能。 如果你的计算运行 Databricks Runtime 16.2 或更高版本,则表共享的默认行为是 WITH HISTORY;对于早期版本的 Databricks Runtime,默认行为是 WITHOUT HISTORY。 对于架构共享,默认值 WITH HISTORY 与 Databricks Runtime 版本无关。 WITH HISTORYWITHOUT HISTORY 需要 Databricks Runtime 12.2 LTS 或更高版本。 另请参阅 “通过历史记录共享提高表读取性能”。

    注释

    如果除了执行时间旅行查询和流式读取外,你还希望收件人使用 table_changes() 函数查询表的更改数据馈送(CDF),则必须在共享表之前在WITH HISTORY

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

若要添加表,请使用 Databricks CLI 运行以下命令。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<table-full-name>",
          "data_object_type": "TABLE",
          "shared_as": "<table-alias>"
        }
      }
    ]
  }'

若要添加架构,请运行以下 Databricks CLI 命令:

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<schema-full-name>",
          "data_object_type": "SCHEMA"
        }
      }
    ]
  }'

注释

针对表格且仅限于表格,可以省略 "data_object_type"

若要了解此示例中列出的选项,请查看 SQL 选项卡上的说明。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

有关从共享中删除表的信息,请参阅更新共享

云令牌资格

Azure Databricks使用云令牌(临时路径范围的云凭据)为收件人提供对共享 Delta 表文件的直接读取访问权限。 在 Databricks 到 Open 共享协议中,这也称为 基于目录的访问模式。 不支持视图、物化视图、外部表、流式表、卷、笔记本、Python UDF 和 AI 模型。 哪些表符合条件取决于共享协议。

Databricks 到 Databricks 共享:当以下所有条件为真时,将使用云令牌。

  • 该表已共享 WITH HISTORY (自始至终的完整历史记录)。
  • 该表在没有分区筛选器的情况下共享。

Databricks-to-Open 共享:当以下所有内容均为 true 时,将使用云令牌(基于目录的访问模式):

  • 共享对象是 托管表或外部 Delta 表
  • 该表已共享 WITH HISTORY (自始至终的完整历史记录)。
  • 该表在没有分区筛选器的情况下共享。
  • 该表不是 CCv2 表。
  • 该表不使用默认存储。

对于 Databricks 到 Databricks 共享,云令牌直接在 Unity Catalog 元存储之间交换,而无需长期有效的访问令牌,从而使性能与直接访问源表相当。 对于从 Databricks 到 Open 的共享,OpenSharing 服务器会在列表响应和元数据响应中包含表的云存储位置以及 accessModes: ["url", "dir"]。 打开的收件人可以调用 “生成临时表凭据 ”终结点来获取凭据,并从云存储中直接读取凭据。

Important

使用云令牌访问时,收件人将收到限定为共享 Delta 表根目录的凭据。 这会授予对数据文件和 Delta 日志的读取访问权限。 Delta 日志包含每个表版本的提交历史记录、有关提交者的信息以及尚未清空的已删除数据。

指定要共享的表分区

若要在将表添加到共享时仅共享表的一部分,请提供分区规范。 使用 Catalog Explorer、Databricks Unity Catalog CLI 或在 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SQL 命令,在将表添加到共享或更新共享时指定分区。 请参阅 将表添加到共享更新共享

Example

以下 SQL 示例显示 inventory 表中的部分数据,该表按 yearmonthdate 列进行分区:

  • 2021 年的数据。
  • 2020 年 12 月的数据。
  • 2019 年 12 月 25 日的数据。
ALTER SHARE share_name
ADD TABLE inventory
PARTITION (year = "2021"),
          (year = "2020", month = "Dec"),
          (year = "2019", month = "Dec", date = "2019-12-25");

使用接收者属性执行分区筛选

可以共享与数据接收者属性匹配的表分区,这也称为参数化分区共享。

默认属性包括:

  • databricks.accountId: 数据接收者所属的 Azure Databricks 帐户(仅限 Databricks 到 Databricks 共享)。
  • databricks.metastoreId:数据接收者所属的 Unity Catalog 元存储(仅适用于 Databricks 到 Databricks 共享)。
  • databricks.name:数据接收者的名称。

创建或更新收件人时,可以创建自定义属性。

按接收者属性进行筛选可以在多个 Databricks 帐户、工作区和用户中共享相同的表,使用相同的共享,同时在它们之间保持数据边界。

例如,如果表包含一个 Azure Databricks 帐户 ID 列,则你可以使用按 Azure Databricks 帐户 ID 定义的表分区创建单个共享。 在共享时,OpenSharing 会动态地仅向每位收件人提供与其 Azure Databricks 账户相关联的数据。

OpenSharing 中基于参数的动态分区共享示意图

如果无法按属性动态分区,则必须为每个接收者单独创建一个共享。

若要在创建或更新共享时指定按接收者属性筛选的分区,可以使用目录资源管理器,或者 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 CURRENT_RECIPIENT SQL 函数:

注释

Databricks Runtime 12.2 或更高版本上提供了收件人属性。

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要更新的共享并单击其名称。

  4. 单击“管理资产”>“添加数据资产”。

  5. 在“添加表”页上,选择包含该表的目录和数据库,然后选择该表。

    如果你不确定哪个目录和数据库包含表,可以使用工作区搜索按名称、列名或注释进行搜索。 请参阅 “搜索工作区对象”。

  6. (可选)单击 “语音气泡加”图标。“分区 ”列下添加分区。

    在“ 将分区添加到表 ”对话框中,使用以下语法添加基于属性的分区规范:

    (<column-name> = CURRENT_RECIPIENT().<property-key>)
    

    例如,

    (country = CURRENT_RECIPIENT().country)
    
  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share-name> ADD TABLE <catalog-name>.<schema-name>.<table-name>
   PARTITION (<column-name> = CURRENT_RECIPIENT().<property-key>);

例如,

ALTER SHARE acme ADD TABLE acme.default.some_table
  PARTITION (country = CURRENT_RECIPIENT().country);

将具有删除矢量或列映射的表添加到共享

Important

此功能目前以公共预览版提供。

删除向量是可在 Delta 表上启用的一项存储优化功能。 请参阅 Databricks 中的删除向量

Azure Databricks 还支持 Delta 表的列映射。 请参阅 有关使用 Delta Lake 列映射重命名和删除列的说明

若要共享具有删除矢量或列映射的表,必须将该表与历史记录一起共享。 请参阅添加表格到共享

与删除向量或列映射共享表时,收件人可以使用 SQL 仓库、运行 Databricks Runtime 14.1 或更高版本的计算引擎,或运行开源delta-sharing-spark 3.1 或更高版本的计算引擎来查询表。 请参阅 启用了删除向量或列映射的读取表 ,以及 启用了删除向量或列映射的读取表

向共享添加架构

在将架构添加到共享之前,请检查是否满足 要求

向共享添加整个架构可让收件人在创建共享时访问架构中的所有数据资产,以及一段时间内添加到架构中的任何资产。 这包括架构中的所有表、视图和卷。 以这种方式共享的表始终包含完整的历史记录。

与收件人共享架构

若要向共享添加架构,请按照向共享添加表中的说明进行操作,操作时注意指定如何添加架构的内容。

使用 SQL 添加、更新或删除架构需要一个运行 Databricks Runtime 13.3 LTS 或更高版本的 SQL 仓库或计算。 使用目录资源管理器执行相同操作没有计算要求。

限制

  • 即使架构包含不受支持的数据资产,也可以共享架构。 这些资产被筛选掉,不会与收件人共享。 不支持的数据资产包括:

    • 使用液体聚类结合分区过滤的表格
    • 具有 V2 检查点的 R2 表
    • 启用了排序规则的表
    • 包含行筛选器或列掩码的表
    • SHALLOW CLONE
    • 共享表中的外键约束
  • 如果共享整个架构,表别名、分区和卷别名不可用。 如果你已为架构中的任何资产创建了别名或分区,则当你将整个架构添加到共享时会移除它们。

  • 如果要为架构中的表或卷指定高级选项,则必须使用 SQL 共享表或卷,并为表或卷提供具有不同架构名称的别名。

  • 不支持模式级别别名。 来自不同目录的同名架构无法添加到同一个共享中。 而是共享具有别名架构名称的单个表。

将 ABAC 策略保护的表和架构添加到共享中

基于属性的访问控制(ABAC) 是一种数据治理模型,可在 Azure Databricks 上提供集中的、灵活且可扩展的访问控制。

可以像共享标准表一样共享受 ABAC 策略保护的表或架构。 若要了解如何将 ABAC 策略应用于数据资产,请参阅 创建和管理行筛选器和列掩码策略

但是,你必须是 特权用户。 特权用户是共享所有者 也是从应用于数据资产的 ABAC 策略中排除的用户。 该策略不控制收件人的访问权限。 收件人对共享资产具有完全访问权限。 ABAC 限制 适用。

向共享添加流式处理表

流式处理表是常规 Delta 表,具有额外的功能支持流式或增量数据处理。 流式处理表专为仅追加的数据源设计,并且仅处理一次输入。 请参阅使用独立流式表

在将流式表添加到共享之前,请检查您是否符合 要求

其他要求

  • 请确保如果工作区启用了工作区目录绑定,工作区对流数据表所在目录具有读取和写入访问权限。 有关详细信息,请参阅 工作区目录绑定
  • 必须在 Delta 表或其他可共享流式处理表或视图上定义可共享流式处理表。
  • 向共享添加流式处理表时,必须在 Databricks Runtime 13.3 LTS 或更高版本上使用 SQL 仓库或计算。

局限性

  • 流式处理表不能有行筛选器和列掩码。
    • 流式处理表的基表可以具有行筛选器和列掩码。
  • 流式处理表不能有分区筛选器。 而是在流式处理表的顶部创建视图。
  • Databricks 到 Open 共享的接收方只能读取流式表的当前快照。 打开收件人不支持时间旅行、查询历史记录、流式读取和 CDF。 如果收件人需要 CDF,请共享启用了 CDF 的常规 Delta 表。
  • 如果收件人无权直接访问基础数据, LIMIT 则不支持子句和谓词下推。 无论查询筛选器如何,系统都会在所有查询结果返回给收件人之前完全具体化所有查询结果。 请参阅收件人是否可以直接访问共享视图、具体化视图和流式处理表中的基础数据?
  • 流式处理表的一般限制也适用。 请参阅 流式处理表限制

与收件人共享流数据表

要向共享添加流式处理表,请执行以下操作:

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 由我共享选项卡上,找到要添加流表的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. 在“编辑资产”页上,搜索或浏览要共享的流式处理表并将其选中。

  6. (可选)在 “别名 ”列中,单击 “语音气泡加”图标。 若要指定别名或备用流式处理表名称,使流式处理表名称更具可读性。 别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人无法使用实际的流式处理表名称。

  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share_name> ADD TABLE <st_name> [COMMENT <comment>] [AS <shared_st_name>];

CLI

运行以下 Databricks CLI 命令。

databricks shares update <share-name> \
  --json '{
    “updates”: [
      {
        “action”: “ADD”,
        “data_object”: {
          “name”: “<st-full-name>",
          “data_object_type”: “TABLE”,
          “comment”: “<comment>”
        }
      }
    ]
  }'

关于如何从共享中删除流式表的信息,请参阅 更新共享

向共享添加托管 Iceberg 表

Important

此功能目前以公共预览版提供。

Apache Iceberg 是一种用于分析工作负载的开源表格格式。 在 Azure Databricks 中,可以在 Unity 目录中创建 Iceberg 表 ,称为 托管 Iceberg 表

在将管理的 Iceberg 表添加到共享之前,请检查是否符合 要求。 Iceberg 表和托管 Iceberg 表限制适用。 请参阅限制

注释

Azure Databricks 不支持将托管的 Iceberg 表共享到外部 Iceberg 客户端。

若要向共享添加托管 Iceberg 表,请执行以下步骤:

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加托管 Iceberg 表的共享,然后单击其名称。

  4. 单击“ 管理资产>编辑资产”。

  5. “编辑资产”页上,搜索或浏览要共享的托管 Iceberg 表,然后将其选中。

  6. (可选)在别名列中,单击 “对话气泡”加号图标。 指定别名或备用托管 Iceberg 表名称,使名称更具可读性。 别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,收件人无法使用实际管理的 Iceberg 表名称。

  7. 单击“ 保存”。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。 (可选)指定 <shared_iceberg_table_name>,以不同名称呈现托管 Iceberg 表。

ALTER SHARE <share_name> ADD TABLE <managed_iceberg_name> [COMMENT <comment>] [AS <shared_iceberg_table_name>];

CLI

运行以下 Databricks CLI 命令。

databricks shares update <share-name> \
  --json '{
    “updates”: [
      {
        “action”: “ADD”,
        “data_object”: {
          “name”: “<managed-iceberg-full-name>",
          “data_object_type”: “TABLE”,
          “comment”: “<comment>”
        }
      }
    ]
  }'

将外部架构或表添加到共享

Important

此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版

Lakehouse 联邦允许您使用 Azure Databricks 对外部数据源运行查询。 可以创建外部架构和表,其中包含由外部系统管理的数据和元数据,Unity 目录添加数据治理以查询这些表。 若要详细了解如何连接到外部源,请参阅 “连接到外部数据库和目录”。

OpenSharing 使你能够安全地从其原始位置共享外部数据,而无需将数据复制到Azure Databricks、复杂的网络设置或凭据传输中。

在将外部架构或表添加到共享之前,请检查是否满足 要求

其他要求

  • 必须在帐户级预览版中启用 Lakehouse 联合身份验证共享 。 请参阅 Manage Azure Databricks 预览版

  • 必须在设置了外部架构或外部表共享的帐户中,启用工作流、笔记本和 Lakeflow Spark 声明性管道的无服务器计算。 请参阅连接到无服务器计算

  • 共享外部模式和表时,数据会在提供程序端被查询并临时物化。 默认情况下,具体化的数据存储在使用 Azure Databricks 默认存储的隐式模式中。 验证是否满足 要求 并观察默认存储 的限制

    有关默认存储区域可用性的详细信息,请参阅 无服务器可用性

    若要选择退出使用 Azure Databricks 默认存储并使用自己的存储进行临时具体化,请提出 支持请求

    Important

    无法共享那些过大而无法物化的外部表。 如果具体化超出限制,查询将失败。

  • 如果选择使用默认存储,则必须在帐户级别启用 OpenSharing for Default Storage – Expanded Access preview。 请参阅 Manage Azure Databricks 预览版

限制

  • 共享外部表不支持 LIMIT 子句或谓词下推。 无论查询筛选器如何,系统都会在所有查询结果返回给收件人之前完全具体化所有查询结果。

查询结果是针对每个查询按需生成的,因此与共享表或具体化视图相比,外部表和架构共享可能不如经济高效。 Azure Databricks建议执行以下操作来提高性能:

  • 保留小于 10 GB 的典型查询结果的大小。
  • 使用临时探索性查询,而不是频繁的数据转储。
  • 在使用云令牌共享技术时,请考虑共享基于外部表创建的物化视图,以提高成本效益和性能。

与收件人共享外来的架构或表

若要将外部架构或表添加到共享,请使用目录资源管理器、Databricks Unity 目录 CLI 或 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SQL 命令。

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加外表或架构的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. “编辑资产” 页上,搜索或浏览您想共享的外部表或模式,并将其选中。

  6. (可选)在 “别名 ”列中,单击 “语音气泡加”图标。 若要指定别名或备用外部架构或表名,以使外部架构或表名更具可读性。 别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人不能使用实际的外部架构或表名。

  7. 单击“ 保存”。

SQL

ALTER SHARE <share-name>
  ADD {TABLE | SCHEMA} {federated_catalog.federated_schema.federated_table | federated_catalog.federated_schema}
  [COMMENT "<comment>"]
  [AS <alias>];

选项包括:

  • AS <alias>:备用名称或别名,使数据资产名称更具可读性。 别名是收件人看到的数据资产名称,必须在查询中使用。 如果指定了别名,则收件人无法使用实际名称。 使用 <catalog-name>.<schema-name>.<view-name> 格式。
  • COMMENT "<comment>":注释会出现在目录资源管理器 UI 中,并在使用 SQL 语句列出和显示数据资产详细信息时出现。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

databricks shares update <share-name> \
  --json '{
    “updates”: [
      {
        “action”: “ADD”,
        “data_object”: {
          “name”: “<federated-data-asset-full-name>",
          “data_object_type”: “{TABLE | SCHEMA}”,
          "shared_as": "<foreign-data-asset-alias>",
          “comment”: “<comment>”
        }
      }
    ]
  }'

向共享添加外部 Iceberg 表

Important

此功能目前以公共预览版提供。

外国冰山表是使用 Lakehouse Federation 从外国冰山目录联合的表。 若要了解有关 Azure Databricks 中的 Apache Iceberg 表的详细信息,请参阅 在 Azure Databricks 中的 Apache Iceberg 是什么?

在开始之前,请检查是否符合常规 要求创建共享。 还可以使用外部 Iceberg 客户端将外国 Iceberg 表共享给收件人。 有关详细信息,请参阅 “启用与外部 Iceberg 客户端共享”。

注释

若要验证收件人是否收到最新数据,请定期刷新您的外国 Iceberg 表。 任何 SELECT 查询或 REFRESH TABLE 命令都刷新表元数据。

Databricks 建议设置计划作业,以便 Azure Databricks 上的外部 Iceberg 表与远程 Iceberg 源保持同步。 有关计划刷新的详细信息,请参阅 “计划查询”。

其他要求

限制

  • 不支持分区。
  • 当与未使用 Iceberg 客户端的开放收件人共享时, LIMIT 不支持子句和谓词下推。 无论查询筛选器如何,系统都会在所有查询结果返回给收件人之前完全具体化所有查询结果。

向共享添加外国冰山表

外国冰山表会自动与完整历史记录共享。

若要将外部 Iceberg 表添加到共享中,请:

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加外国 Iceberg 表的共享,然后单击其名称。

  4. 单击“ 管理资产>编辑资产”。

  5. “编辑资产”页上,搜索或浏览要共享的外部 Iceberg 表,然后选择它。

  6. (可选)在 “别名 ”列中,单击 “语音气泡加”图标 。指定别名。 别名是收件人看到且在查询中必须使用的名称。

  7. 单击“ 保存”。

SQL

在笔记本或 Databricks SQL 查询编辑器中运行以下命令。 (可选)指定 <shared_table_name> 以其他名称公开外国 Iceberg 表。

ALTER SHARE <share_name> ADD TABLE <foreign_iceberg_table_name> [COMMENT <comment>] [AS <shared_table_name>];

CLI

运行以下 Databricks CLI 命令。

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<foreign-iceberg-table-full-name>",
          "data_object_type": "TABLE",
          "comment": "<comment>"
        }
      }
    ]
  }'

向共享添加视图

视图是从一个或多个表或其他视图创建的只读对象。 可以从包含在 Unity Catalog 元存储中的多个架构和目录中的表和其他视图创建视图。 请参阅 “创建和管理视图”。

在共享视图时,数据会被查询并暂时物化。 具体化数据存储在视图的父架构或目录的存储位置,或者存储在元存储库的根位置。

在将视图添加到共享之前,请检查是否符合 要求

其他要求

  • 必须在 Delta 表、其他可共享视图或本地具体化视图和流式处理表上定义可共享视图。 无法在外部表上定义可共享的视图。
  • 向共享添加视图时,必须在 Databricks Runtime 13.3 LTS 或更高版本上使用 SQL 仓库或计算。
  • 如果工作区启用了工作区目录绑定,请检查工作区是否具有对目录的读取和写入访问权限。 有关详细信息,请参阅 工作区目录绑定
  • 共享视图时,可能会根据收件人的计算类型和帐户关系,在提供程序端查询并暂时具体化数据。 具体化数据存储在视图的父架构或目录的存储位置,或者存储在元存储库的根位置。 有关具体化何时发生以及谁为其付费的详细信息,请参阅收件人是否可以直接访问共享视图、具体化视图和流式处理表中的基础数据?以及如何产生和检查 OpenSharing 成本?
  • 如果存储位置具有自定义网络配置(例如防火墙或专用链接),则必须验证是否允许收件人连接到存储位置。 有关为无服务器计算配置防火墙规则的说明,请参阅为Azure资源配置Azure网络安全外围

限制

与收件人共享视图

本部分介绍如何使用 Catalog Explorer、Databricks CLI 或 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SQL 命令向共享添加视图。 如果你倾向于使用 Unity Catalog REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加视图的共享,然后单击其名称。

  4. 单击“管理资产”>“添加数据资产”。

  5. 在“添加表”页上,搜索或浏览要共享的视图并将其选中。

  6. (可选)单击 “语音气泡加”图标。“别名 ”列下指定备用视图名称或 别名,以使视图名称更易于阅读。 别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人不能使用实际视图名称。

  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share-name> ADD VIEW <catalog-name>.<schema-name>.<view-name>
   [COMMENT "<comment>"]
   [AS <alias>];

选项包括:

  • AS <alias>:备用视图名称或别名,以使视图名称更具可读性。 别名是收件人可见且必须在查询中使用的视图的名称。 如果指定了别名,则收件人不能使用实际视图名称。 使用 <schema-name>.<view-name> 格式。
  • COMMENT "<comment>":注释显示在目录资源管理器 UI 中,当你使用 SQL 语句列出和显示视图详细信息时也会出现注释。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

运行以下 Databricks CLI 命令:

databricks shares update <share-name> \
  --json '{
    "updates": [
      {
        "action": "ADD",
        "data_object": {
          "name": "<view-full-name>",
          "data_object_type": "VIEW",
          "shared_as": "<view-alias>"
        }
      }
    ]
  }'

"shared_as": "<view-alias>" 是可选的,它提供备用视图名称或别名,使视图名称更易读。 别名是收件人可见且必须在查询中使用的视图的名称。 如果指定了别名,则收件人不能使用实际视图名称。 使用 <schema-name>.<view-name> 格式。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

有关从共享中移除视图的信息,请参阅更新共享

向共享中添加动态视图以筛选行和列

可以使用动态视图配置对表数据的细粒度访问控制,包括:

  • 列或行级别的安全性。
  • 数据掩码。

创建使用 CURRENT_RECIPIENT() 函数的动态视图时,可以根据在收件人定义中指定的属性限制收件人访问权限。

本部分提供了使用动态视图在行和列级别限制收件人访问表数据权限的示例。

要求

  • 检查您是否满足要求以添加视图到共享。
  • Databricks Runtime 版本:Databricks Runtime 14.2 及以上版本中支持 CURRENT_RECIPIENT 函数。

局限性

  • 视图共享的所有限制都适用。
  • 当提供程序共享使用 CURRENT_RECIPIENT 函数的视图时,由于共享上下文的原因,提供程序无法直接查询该视图。 若要测试此类动态视图,提供程序须与自己共享视图并以收件人身份查询视图。
  • 提供程序无法创建引用动态视图的视图。

设置收件人属性

在这些示例中,要共享的表具有一个名为 country 的列,只有具有匹配的 country 属性的收件人才能查看特定行或列。

可在 Azure Databricks 笔记本或 SQL 查询编辑器中使用目录资源管理器或 SQL 命令设置收件人属性。

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“收件人”选项卡上,找到要向其添加属性的收件人,然后单击其名称。

  4. 在页面右下角的 “收件人”属性下,单击 Azure Databricks 收件人的 铅笔图标,在 databricks.metastoreID 旁边;或对于打开的收件人,单击 databricks.name 旁边的铅笔图标。

  5. 在“编辑收件人属性”对话框中,输入列名称作为键(在本例中为 country),并输入要按其筛选的值(例如,CA)。

  6. 单击“ 保存”。

SQL

若要设置收件人的属性,使用 ALTER RECIPIENT。 在此示例中,country 属性设置为 CA

ALTER RECIPIENT recipient1 SET PROPERTIES ('country' = 'CA');

创建对收件人设置了行级权限的动态视图

在此示例中,只有具有匹配的 country 属性的收件人才能查看某些行。

CREATE VIEW my_catalog.default.view1 AS
  SELECT * FROM my_catalog.default.my_table
  WHERE country = CURRENT_RECIPIENT('country');

另一种选择是让数据提供者维护一个独立的映射表,将事实数据表字段映射到收件人属性。 这样,收件人属性和事实数据表字段就可以分离,从而获得更大的灵活性。

创建一个具有列级权限的动态视图供收件人使用

在此示例中,只有匹配 country 属性的收件人才能查看某些列。 其他人看到的返回的数据是 REDACTED

CREATE VIEW my_catalog.default.view2 AS
  SELECT
  CASE
    WHEN CURRENT_RECIPIENT('country') = 'US' THEN pii
    ELSE 'REDACTED'
  END AS pii
  FROM my_catalog.default.my_table;

与收件人共享动态视图

若要与收件人共享动态视图,请使用与标准视图所用相同的 SQL 命令或 UI 过程。 请参阅向共享添加视图

向共享添加具体化视图

与视图一样,物化视图是查询的结果,可以像表一样访问它们。 与常规视图不同,具体化视图的结果反映上次刷新具体化视图时的数据状态。 有关具体化视图的更多详细信息,请参阅 使用独立具体化视图

在将具体化视图添加到共享之前,请检查是否符合 要求

其他要求

  • 如果您的工作区已启用工作区与目录绑定,请检查工作区是否具备读取和写入包含具体化视图的目录的权限。 有关详细信息,请参阅 工作区目录绑定
  • 可共享具体化视图必须在 Delta 表或其他可共享流表、视图或具体化视图上定义。
  • 向共享添加具体化视图时,必须在 Databricks Runtime 13.3 LTS 或更高版本上使用 SQL 仓库或计算。

局限性

  • 具体化视图不能有行筛选器,但具体化视图的基表可以具有行筛选器和列掩码。
  • 物化视图不能有分区过滤器。 在物化视图之上创建视图。
  • 通过 Databricks 向 Open 共享的接收方只能读取物化视图的当前快照。 不支持对开放接收方进行流式读取。
  • 如果收件人无权直接访问基础数据, LIMIT 则不支持子句和谓词下推。 无论查询筛选器如何,系统都会在所有查询结果返回给收件人之前完全具体化所有查询结果。 请参阅收件人是否可以直接访问共享视图、具体化视图和流式处理表中的基础数据?
  • 具体化视图的一般限制也适用。 请参阅 具体化视图限制

将具体化视图共享给收件人

本部分介绍如何使用目录资源管理器、Databricks CLI 或 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 SQL 命令向共享添加具体化视图。 如果想要使用 REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要添加具体化视图的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. 编辑资产页面上,搜索或浏览要共享的物化视图,然后选择它。

  6. (可选)在别名列中,单击 “对话气泡”加号图标。 指定别名或备用具体化视图名称,使具体化视图名称更具可读性。 别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人无法使用实际具体化视图名称。

  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share_name> ADD MATERIALIZED VIEW <mv_name> [COMMENT <comment>] [AS <shared_mv_name>];

CLI

databricks shares update <share-name> \
  --json '{
    “updates”: [
      {
        “action”: “ADD”,
        “data_object”: {
          “name”: “<mat-view-full-name>”,
          “data_object_type”: “MATERIALIZED_VIEW”,
          “comment”: “<comment>”
        }
      }
    ]
  }'

有关从共享中移除具体化视图的信息,请参阅更新共享

向共享添加卷

卷是 Unity Catalog 中的对象,表示云对象存储位置中的一个逻辑存储卷。 它们主要用于提供对非表格数据资产的治理。 请参阅“什么是 Unity Catalog 卷?”。

在将卷添加到共享之前,请检查是否满足 要求

其他要求

  • 卷共享仅在 Databricks 到 Databricks 共享中受到支持。
  • 向共享添加卷时,必须使用版本 2023.50 或更高版本的 SQL 仓库,或者 Databricks Runtime 14.1 或更高版本的计算资源。
  • 如果提供方的卷存储具有自定义网络配置(例如防火墙或专用链接),则提供方必须验证收件人的数据平面地址是否已正确列入白名单,以便能够连接到卷的存储位置。 目录资源管理器可能不会在收件人端正确显示卷。

注释

2024 年 7 月 25 日或之后,卷注释包含在使用 Databricks 到 Databricks 共享方式与接收者分享的共享中。 如果想在发布日期之前通过已经与收件人共享的内容开始共享评论,则必须撤销并重新授予收件人访问权限,以触发评论共享。

与收件人共享存储卷

本部分介绍如何使用目录资源管理器、Databricks CLI 或 Azure Databricks 笔记本或 SQL 查询编辑器中的 SQL 命令将卷添加到共享。 如果你倾向于使用 Unity Catalog REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“我共享的内容”选项卡上,找到要向其添加卷的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. 编辑资产页面上,搜索或查找要共享的卷并将其选中。

    或者,可选择包含该卷的整个架构。 请参阅向共享添加架构

  6. (可选)单击 “语音气泡加”图标。“别名 ”列下指定备用卷名称或 别名,以使卷名更易于阅读。

    如果选择整个架构,则别名不可用。

    别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人无法使用实际的卷名。

  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share-name> ADD VOLUME <catalog-name>.<schema-name>.<volume-name>
   [COMMENT "<comment>"]
   [AS <alias>];

选项包括:

  • AS <alias>:备用卷名称或别名,使卷名称更易读。 别名是接收者会看到且必须在查询中使用的卷名称。 如果指定了别名,则接收者不能使用实际卷名称。 使用 <schema-name>.<volume-name> 格式。
  • COMMENT "<comment>":注释显示在数据资源管理器 UI 中,当你使用 SQL 语句列出和显示卷详细信息时也会出现注释。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

使用 Databricks CLI 0.210 或更高版本运行以下命令:

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<volume-full-name>",
           "data_object_type": "VOLUME",
           "string_shared_as": "<volume-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<volume-alias>" 是可选的,它提供备用卷名称或别名,使卷名称更易读。 别名是接收者会看到且必须在查询中使用的卷名称。 如果指定了别名,则接收者不能使用实际卷名称。 使用 <schema-name>.<volume-name> 格式。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

要了解如何从共享中删除卷,请查看更新共享

将 Python UDF 添加到共享资源中

用户定义函数(UDF)允许重复使用和共享在 Azure Databricks 上扩展内置功能的代码。 若要了解如何创建 Python UDF,请参阅 用户定义的标量函数 - Python

在将 Python UDF 添加到共享之前,请检查是否满足 要求

其他限制

  • 不能与开放收件人共享 Python UDF。

与收件人共享 Python UDF

本部分介绍如何使用目录资源管理器、Databricks CLI 或 Azure Databricks 笔记本或 SQL 查询编辑器中的 SQL 命令将 Python UDF 添加到共享。 如果你倾向于使用 Unity Catalog REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加 Python UDF 的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. “编辑资产 ”页上,搜索或浏览要共享的 Python UDF 并将其选中。

    或者,可以选择包含 Python UDF 的整个架构。 请参阅向共享添加架构

  6. (可选)单击 语音气泡加号图标,在 Alias 列下指定备用 Python UDF 名称,或 Alias,以提升 Python UDF 名称的可读性。

    如果选择整个架构,则别名不可用。

    别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人无法使用实际的 Python UDF 名称。

  7. 单击“ 保存”。

SQL

运行以下命令,该命令在笔记本或 Databricks SQL 查询编辑器 中使用 ADD MODEL:

ALTER SHARE <share-name> ADD MODEL <catalog-name>.<schema-name>.<python-udf-name>
   [AS <alias>];

选项包括:

  • AS <alias>:备用 Python UDF 名称或别名,使 Python UDF 名称更具可读性。 别名是收件人看到的 Python UDF 名称,必须在查询中使用。 如果指定了别名,则收件人无法使用实际的 Python UDF 名称。 使用 <schema-name>.<python-udf-name> 格式。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

运行以下命令,该命令使用 Databricks CLI 0.210 或更高版本将对象类型指定为模型:

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<python-udf-full-name>",
           "data_object_type": "MODEL",
           "string_shared_as": "<python-udf-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<python-udf-alias>" 是可选的,并提供备用的 Python UDF 名称或别名,以使 Python UDF 名称更易于阅读。 别名是收件人看到的 Python UDF 名称,必须在查询中使用。 如果指定了别名,则收件人无法使用实际的 Python UDF 名称。 使用 <schema-name>.<python-udf-name> 格式。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

添加FeatureSpecs到一个共享

FeatureSpec 是用户定义的一组功能和函数。 收件人可以从共享的FeatureSpec创建特性服务端点。 若要了解如何创建FeatureSpecs,请参阅创建FeatureSpec

在将之前,请检查是否满足FeatureSpecs

其他要求

  • 必须将所有依赖项添加到共享。 使用 UI 将 A FeatureSpec 添加到共享时,所有依赖项都应自动添加到共享中。
  • 如果将依赖项添加到模型,则还必须将其添加到共享。

其他限制

  • 如果此资产是另一个模型的依赖项,则不能指定别名。
  • 不能与已开放的收件人共享 FeatureSpecs

FeatureSpecs与收件人共享

本部分介绍如何在 Azure Databricks 笔记本或 SQL 查询编辑器中使用 Catalog Explorer、Databricks CLI 或 SQL 命令将 FeatureSpecs 添加到共享。 如果你倾向于使用 Unity Catalog REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加的 FeatureSpec 共享并单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. “编辑资产 ”页上,搜索或浏览 FeatureSpec 要共享的资源并选择它。

    或者,可以选择包含 FeatureSpec 的整个架构。 请参阅向共享添加架构

  6. (可选)单击 “语音气泡加”图标。“别名 ”列下指定备用 FeatureSpec 名称或 别名,使 FeatureSpec 名称更易于阅读。

    如果选择整个架构,则别名不可用。

    别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则收件人无法使用实际 FeatureSpec 名称。

  7. 如果有任何依赖项,“ 添加所有依赖项 ”对话框会告诉你它们都是自动添加的。 单击“ 添加所有依赖项”。

  8. 单击“ 保存”。

SQL

运行以下命令,该命令在笔记本或 Databricks SQL 查询编辑器 中使用 ADD MODEL:

ALTER SHARE <share-name> ADD MODEL <catalog-name>.<schema-name>.<featurespec-name>
   [AS <alias>];

选项包括:

  • AS <alias>:备用 FeatureSpec 名称或别名,使 FeatureSpec 名称更易于阅读。 别名是 FeatureSpec 收件人看到的名称,必须在查询中使用这一名称。 如果指定了别名,则收件人无法使用实际 FeatureSpec 名称。 使用 <schema-name>.<featurespec-name> 格式。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

运行以下命令,该命令使用 Databricks CLI 0.210 或更高版本将对象类型指定为模型:

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<featurespec-full-name>",
           "data_object_type": "MODEL",
           "string_shared_as": "<featurespec-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<volume-alias>" 是可选的,并提供备用 FeatureSpec 名称或别名,以使 FeatureSpec 名称更易于阅读。 别名是 FeatureSpec 收件人看到的名称,必须在查询中使用这一名称。 如果指定了别名,则收件人无法使用实际 FeatureSpec 名称。 使用 <schema-name>.<featurespec-name> 格式。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

将模型添加到共享

在将模型添加到共享之前,请检查是否满足 要求

注释

模型注释和模型版本注释已包含在通过 Databricks 到 Databricks 共享而进行的分享中。

其他要求

  • 模型共享仅在 Databricks 到 Databricks 共享中受支持。
  • 在向共享添加模型时,必须在版本 2023.50 或更高版本上使用 SQL 仓库或 Databricks Runtime 14.0 或更高版本上的计算资源。

与收件人共享模型

本部分介绍如何使用 Catalog Explorer、Databricks CLI 或 Azure Databricks 笔记本或 SQL 查询编辑器中的 SQL 命令向共享添加模型。 如果你倾向于使用 Unity Catalog REST API,请参阅 REST API 参考中的 PATCH /api/2.1/unity-catalog/shares/

若要向共享添加模型,请执行以下操作:

目录浏览器

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到要向其添加模型的共享,然后单击其名称。

  4. 单击“管理资产 > 编辑资产”。

  5. 在“编辑资产”页上,搜索或浏览到要共享的模型并将其选中。

    或者,可以选择包含模型的整个架构。 请参阅向共享添加架构

  6. (可选)单击 “语音气泡加”图标。“别名 ”列下指定备用模型名称或 别名,使模型名称更具可读性。

    如果选择整个架构,则别名不可用。

    别名是收件人看到且在查询中必须使用的名称。 如果指定了别名,则接收者不能使用实际模型名称。

  7. 单击“ 保存”。

SQL

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

ALTER SHARE <share-name> ADD MODEL <catalog-name>.<schema-name>.<model-name>
   [COMMENT "<comment>"]
   [AS <alias>];

选项包括:

  • AS <alias>:备用模型名称或别名,以使模型名称更具可读性。 别名是收件人可见的模型名称,并且必须在查询中使用。 如果指定了别名,则接收者不能使用实际模型名称。 使用 <schema-name>.<model-name> 格式。
  • COMMENT "<comment>":注释显示在目录资源管理器 UI 中,当你使用 SQL 语句列出和显示模型详细信息时也会出现注释。

有关 ALTER SHARE 选项的详细信息,请参阅 ALTER SHARE

CLI

使用 Databricks CLI 0.210 或更高版本运行以下命令:

 databricks shares update <share-name> \
   --json '{
     "updates": [
       {
         "action": "ADD",
         "data_object": {
           "name": "<model-full-name>",
           "data_object_type": "MODEL",
           "string_shared_as": "<model-alias>"
         }
       }
     ]
   }'

"string_shared_as": "<model-alias>" 是可选的,它提供备用模型名称或别名,使模型名称更易读。 别名是收件人可见的模型名称,并且必须在查询中使用。 如果指定了别名,则接收者不能使用实际模型名称。 使用 <schema-name>.<model-name> 格式。

若要了解其他参数,请在 REST API 参考中运行 databricks shares update --help 或查看 PATCH /api/2.1/unity-catalog/shares/

有关从共享中移除模型的信息,请参阅更新共享

将笔记本文件添加到共享

在将笔记本文件添加到共享之前,请检查是否满足 要求

使用目录资源管理器将笔记本文件添加到共享。

  1. 在 Azure Databricks 工作区中,单击 Data icon.Catalog
  2. 单击 “OpenSharing > ”按钮。
  3. 在“ 我共享 ”选项卡上,找到要向其添加笔记本的共享并单击其名称。
  4. 单击“管理资产”并选择“添加笔记本文件”。
  5. 在“添加笔记本文件”页上,单击文件图标以浏览要共享的笔记本。
    • 单击要共享的文件,然后单击“选择”。
    • (可选)在“共享为”字段中为该文件指定一个用户友好的别名。 这是收件人看到的标识符。
    • 存储位置下,输入云存储中要存储笔记本的外部位置。 您可以在已定义的外部位置下指定一个子路径。 如果未指定外部位置,笔记本将存储在元存储级别存储位置(或“元存储根位置”) 中。 如果没有为元存储定义根位置,则必须在此处输入外部位置。 请参阅将托管存储添加到现有元存储
  6. 单击“ 保存”。

共享的笔记本文件现在会显示在“资产”选项卡上的“笔记本文件”列表中。

从共享中删除笔记本文件

若要从共享中删除笔记本文件,请执行以下操作:

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

  2. 目录 窗格顶部,单击 齿轮图标,然后选择 OpenSharing

    或者,在右上角,单击“ 共享 > OpenSharing”。

  3. 在“ 我共享 ”选项卡上,找到包含笔记本的共享,然后单击共享名称。

  4. 在“资产”选项卡上,找到要从共享中删除的笔记本文件。

  5. 单击 Kebab 菜单图标。 行右侧的 kebab 菜单,然后选择“ 删除笔记本文件”。

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

更新共享中的笔记本文件

若要更新已共享的笔记本,必须重新添加它,并在 “共享”字段中 为其提供一个新别名。 Databricks 建议您使用能够指示笔记本修订状态的名称,例如 <old-name>-update-1。 可能需要将更改通知给接收者。 接收者必须选择并克隆新笔记本才能利用你做出的更新。

启用与外部 Iceberg 客户端共享

可以将 Delta 表、外部 Iceberg 表、视图、具体化视图和流式处理表与使用 Apache Iceberg REST 目录 API 的外部 Iceberg 客户端共享。

在共享之前,请验证是否满足将数据资产添加到共享所需的 OpenSharing 要求

注释

此功能不同于 共享托管的 Iceberg 表

其他限制

  • 不支持启用了删除向量的表。
  • 不支持托管的Iceberg表。
  • 使用默认存储的资产不能共享给外部 Iceberg 客户端。 请参阅 Databricks 中的默认存储

与外部 Iceberg 客户端共享

若要与外部 Iceberg 客户端共享数据资产,请执行以下操作:

  1. 如果要共享 Delta 表,请将每个 Delta 表 IcebergCompatV3 配置为将其公开为与 Iceberg 兼容的表。 这可实现 Iceberg 元数据与标准 Delta 操作的异步生成。 检查是否满足 要求 以与 Iceberg 客户端共享 Delta 表,并了解 限制。 若要了解如何启用 Iceberg 读取,请参阅“启用 Iceberg 读取”(UniForm)。

    如果要共享到 Snowflake,只有启用了统一功能的表才会为收件人显示。 其他表已被筛选。

    注释

    • 使用 DESCRIBE HISTORY 确认 Iceberg 元数据生成完成,然后才能从 Iceberg 客户端查询表。
    • 不支持 OIDC 身份验证类型。
  2. 将数据资产添加到共享资源。 有关详细说明,请参阅:

    Important

    如果共享视图、具体化视图或流式处理表,则触发提供程序端数据具体化,这可能会导致计算成本的累积。 有关详细信息,请参阅 如何产生和检查 OpenSharing 成本?

  3. 与打开的收件人共享。 有关如何创建收件人并向其授予共享访问权限的说明,请参阅 使用持有者令牌(Databricks-to-Open 共享)为非 Databricks 用户创建收件人对象,为 OpenSharing 收件人启用 Open ID Connect (OIDC) 联合身份验证。

其他资源