本页介绍 Azure Databricks 中的增量共享,这是一个安全的数据共享平台,可用于与组织外部的用户共享 Azure Databricks 中的数据和 AI 资产,无论他们是否使用 Azure Databricks。 Delta 共享是 Databricks 市场的基础,Databricks 市场是一个开放论坛,专用于交换数据产品,也是 Clean Rooms的基础,Clean Rooms 是一个安全且隐私保护的环境,多个参与方可以在敏感企业数据上协同工作。
Delta Sharing 还可用作开源项目,可用于从其他平台共享 Delta 表。
Delta Sharing 的工作原理是什么?
Delta Sharing 是由 Databricks 开发的开放协议,用于与其他组织进行安全的数据共享,而不考虑他们使用的计算平台。
有 3 种方法来使用 Delta Sharing 共享数据:
Databricks 到 Databricks 共享协议,用于在已启用 Unity Catalog 的工作区中,与同样有权访问已启用 Unity Catalog 的 Databricks 工作区的用户共享数据和 AI 资产。
此方法使用内置于 Azure Databricks 中的 Delta Sharing 服务器。 它支持其他协议中不支持的一些 Delta Sharing 功能,包括笔记本共享、Unity Catalog 卷共享、Unity Catalog AI 模型共享、Unity Catalog 数据治理、审核以及提供者和接收者的使用情况跟踪。 与 Unity 目录的集成简化了提供者和接收者的设置和治理,并提高了性能。
Databricks 开放共享协议让你可以与任何计算平台上的用户共享在启用了 Unity Catalog 的 Databricks 工作区中所管理的表格数据。
此方法使用 Azure Databricks 中内置的 Delta Sharing 服务器。当你使用 Unity Catalog 管理数据并希望与不使用 Databricks 或无权访问支持 Unity Catalog 的 Databricks 工作区的用户共享数据时,此方法非常有用。 将 Unity Catalog 与供应商方集成简化了供应商的设置和治理。
开源 Delta Sharing 服务器的客户管理实现允许你在任何平台之间共享,无论是否是 Databricks。
Azure Databricks 文档中未介绍如何设置你自己的 Delta Sharing 服务器。 请参阅 github.com/delta-io/delta-sharing。
共享、提供者和接收者
Azure Databricks 中 Delta Sharing 的主要概念是“共享”、“提供者”和“接收者”。
什么是共享?
在 Delta Sharing 中,“share”指的是一个只读集合,其中包含提供者希望与一个或多个接收者共享的表和表分区。 如果收件人使用启用 Unity Catalog 的 Databricks 工作区,则还可以在共享中包括笔记本文件、视图(包括在行级别和列级别限制访问的动态视图)、Unity Catalog 卷和 Unity Catalog 模型。
可以随时添加或删除共享中的表、流式处理表、托管的 Iceberg 表、视图、具体化视图、卷、模型和笔记本文件,并且可以随时分配或撤销对共享的数据收件人访问权限。
在启用了 Unity Catalog 的 Azure Databricks 工作区中,共享是在 Unity Catalog 中注册的安全对象。 如果从 Unity Catalog 元存储删除某个共享,则该共享的所有接收者都将无法访问该共享。
什么是提供者?
“提供者”是与接收者共享数据的实体。 如果你是提供者,并且想要利用内置的 Databricks Delta Sharing 服务器,并使用 Unity Catalog 管理共享和接收者,则需要至少一个为 Unity Catalog 启用的 Azure Databricks 工作区。 无需将所有现有工作区迁移到 Unity Catalog。 只需为 Delta Sharing 需求创建新的启用了 Unity Catalog 的工作区即可。
如果接收者位于启用了 Unity Catalog 的 Databricks 工作区中,则提供者也是一个 Unity Catalog 安全对象,该对象代表提供者组织并将该组织与一组共享相关联。
什么是接收者?
“接收者”是一个从提供者接收共享的实体。 在 Unity Catalog 中,共享是一个安全对象,表示组织并将其与凭据或安全共享标识符相关联,允许该组织访问一个或多个共享。
作为数据提供者(共享者),可为任何给定的 Unity Catalog 元存储定义多个接收者,但如果要与特定用户或用户组共享来自多个元存储的数据,则必须为每个元存储单独定义接收者。 一个接收者可以访问多个共享。
如果提供者从 Unity Catalog 元存储删除接收者,则该接收者将失去对其以前可以访问的所有共享的访问权限。
请参阅创建和管理 Delta Sharing 的数据接收者(Databricks 到 Databricks 共享)。
开放共享与 Databricks 到 Databricks 共享
本部分介绍用于从为 Unity Catalog 启用的 Databricks 工作区共享的两种协议。
注意
本部分假定提供者位于启用了 Unity Catalog 的 Azure Databricks 工作区上。 若要了解如何设置开放源代码 Delta Sharing 服务器以从非 Databricks 平台或非 Unity Catalog 工作区共享,请参阅 github.com/delta-io/delta-sharing。
提供者在 Azure Databricks 中使用 Delta Sharing 的方式取决于他们与谁共享数据:
- 通过开放共享,可与任何用户共享数据(无论他们是否有权访问 Azure Databricks)。
- 使用 Databricks 到 Databricks 共享,可以与其工作区附加到不同于你的 Unity Catalog 元存储的 Azure Databricks 用户。 Databricks 到 Databricks 还支持笔记本、卷和模型共享,开放共享不提供此支持。
什么是开放 Delta Sharing?
如果要与 Azure Databricks 工作区外的用户共享数据(无论他们是否使用 Databricks),可使用开放 Delta Sharing 安全地共享数据。 作为数据提供方,你可以使用以下任一方法管理与共享收件人的身份验证:
- 生成长期持有者令牌,并将其安全地与收件人共享。 它们使用该令牌进行身份验证,并获取对你已向其授予访问权限的共享中包含的表的读取访问权限。
- 使用 Open ID Connect (OIDC) 联合,向接收者授予短期 Databricks OAuth 令牌,以交换由接收者的 IdP 传递给 Databricks 的 JWT 令牌。
接收者可使用许多计算工具和平台访问共享数据,包括:
- Azure Databricks
- Apache Spark
- 熊猫
- Power BI
有关 Delta Sharing 连接器的完整列表以及如何使用它们的信息,请参阅 Delta Sharing 文档。
另请参阅使用 Delta Sharing 开放共享协议共享数据(针对提供者)。
Databricks 到 Databricks Delta Sharing 是什么?
如果要与拥有启用了 Unity Catalog 的 Databricks 工作区的用户共享数据,可以使用 Databricks 到 Databricks Delta Sharing。 通过 Databricks 到 Databricks 共享,可以与其他 Databricks 帐户中的用户共享数据,无论他们是在 AWS 上、Azure 上还是 GCP 上。 这也是在你自己的 Databricks 帐户中跨不同 Unity Catalog 元存储安全地共享数据的好方法。 请注意,无需使用 Delta Sharing 在附加到同一 Unity Catalog 元存储的工作区之间共享数据,因为在这种情况下,可以使用 Unity Catalog 本身来管理对各工作区中数据的访问。
Databricks 到 Databricks 共享的一个优点是共享接收者不需要令牌来访问共享,并且提供商也不需要管理接收者令牌。 共享连接的安全性(包括所有验证、身份验证和审核)完全通过 Delta Sharing 和 Databricks 平台进行管理。 另一个优点是共享 Databricks 笔记本文件、视图和 Unity Catalog 卷和 Unity Catalog 模型的功能。
另请参阅使用 Delta Sharing Databricks 到 Databricks 协议共享数据(针对提供者)。
提供者管理员如何设置 Delta Sharing?
本部分概述了提供者如何启用 Delta Sharing 并从已启用 Unity Catalog 的 Azure Databricks 工作区启动共享。 有关开放源代码 Delta Sharing,请参阅 github.com/delta-io/delta-sharing。
同一帐户中 Unity Catalog 元存储之间的 Databricks 到 Databricks 共享始终处于启用状态。 如果提供者要启用 Delta Sharing 以与其他帐户或非 Databricks 客户端中的 Databricks 工作区共享数据,Azure Databricks 帐户管理员或元存储管理员执行以下设置步骤(概要步骤):
为管理要共享的数据的 Unity Catalog 元存储启用增量共享。
注意
如果只想使用 Delta Sharing 与帐户中其他 Unity Catalog 元存储上的用户共享数据,则无需在元存储上启用 Delta Sharing。 默认情况下,在单个 Azure Databricks 帐户中启用元存储到元存储共享。
请参阅在元存储上启用增量共享。
创建一个共享,其中包含在 Unity Catalog 元存储中注册的数据资产。
如果要与非 Databricks 接收者共享(称为开放共享),则可以包含 Delta 或 Parquet 格式的表。 如果你计划使用 Databricks 到 Databricks 共享,则还可以将视图、Unity Catalog 卷、Unity Catalog 模型和笔记本文件添加到共享。
创建接收者。
请参阅创建和管理 Delta Sharing 的数据接收者(Databricks 到 Databricks 共享)。
如果接收者不是 Databricks 用户,或者无权访问为 Unity Catalog 启用的 Databricks 工作区,则必须使用开放共享。 可为该接收者生成基于持有者令牌的凭据,或使用 OIDC 联合。
如果接收者有权访问为 Unity Catalog 启用的 Databricks 工作区,则可以使用 Databricks 到 Databricks 共享,并且不需要基于令牌的凭据。 你向接收者请求一个共享标识符,并使用它来建立安全连接。
提示
将自己作为测试接收者来尝试进行设置过程。
向接收者授予对一个或多个共享的访问权限。
请参阅管理对 Delta Sharing 数据共享的访问权限(针对提供者)。
注意
此步骤也可以由具有
USE SHARE
、USE RECIPIENT
和SET SHARE PERMISSION
权限的非管理员用户执行。 请参阅 Unity Catalog 特权和安全对象。向接收者发送连接到共享所需的信息(仅限开放共享)。
若要使用持有者令牌打开共享,请使用安全通道向收件人发送一个激活链接,允许他们下载基于令牌的凭据。 请参阅向接收者发送其连接信息。
若要使用 OIDC 令牌联合进行开放共享,请发送生成的门户 URL。 请参阅使用 Open ID Connect (OIDC) 联合身份验证启用对 Delta Sharing 共享(开放共享)的身份验证。
对于 Databricks 到 Databricks 共享,只要你向接收者授予对共享的访问权限,共享中包含的数据就会在接收者的 Databricks 工作区中可用。
接收者现在可访问共享数据。
接收者如何访问共享数据?
接收者以只读格式访问共享的数据资产。 共享笔记本文件是只读的,但它们可以克隆,然后像任何其他笔记本一样在接收者工作区中修改和运行。
安全访问取决于共享模型:
开放共享(接收者未为 Unity Catalog 启用 Databricks 工作区)有两个选项:
- 在持有者令牌流中,每当接收方访问所选工具中的数据时,都会提供凭据,包括 Apache Spark、pandas、Power BI、Databricks 等。 请参阅使用持有者令牌读取通过 Delta Sharing 开放共享来共享的数据(针对接收者)。
- 在 OIDC 令牌联合流中,收件人或收件人的客户端应用使用自己的 IdP 访问数据。 请参阅 在用户到计算机流(开放共享)中使用 Open ID Connect(OIDC)联合身份验证接收 Delta Sharing 共享,以及 使用 Python 客户端和 Open ID Connect(OIDC)联合身份验证在计算机到计算机流(开放共享)中接收 Delta Sharing 共享。
Databricks 到 Databricks(已为 Unity Catalog 启用接收方工作区):接收方使用 Databricks 访问数据。 他们可以使用 Unity Catalog 向其 Databricks 帐户中的其他用户授予和拒绝访问权限。 请参阅读取使用 Databricks-to-Databricks 增量共享(适用于接收方)共享的数据。
每当数据提供者更新自己的 Databricks 帐户中的数据表或卷时,更新将准实时地显示在接收者的系统中。 若要了解如何通过 Delta Sharing 访问与您共享的数据,请参阅 使用 Delta Sharing 访问与您共享的数据(收件人)。
如何跟踪共享和访问共享数据的人员?
启用了 Unity Catalog 的 Azure Databricks 工作区上的数据提供者可以使用 Azure Databricks 审核日志记录和系统表来监视共享和接收者的创建和修改,并且可以监视共享上的接收者活动。 请参阅审核和监视数据共享。
在 Databricks 工作区中使用共享数据的数据接收者可使用 Databricks 审核日志记录和系统表来了解谁正在访问哪些数据。 请参阅审核和监视数据共享。
共享卷
可以使用 Databricks 到 Databricks 共享流共享卷。 请参阅将卷添加到共享(适用于提供方)和读取使用 Databricks 到 Databricks 增量共享(对于接收方)来共享的数据(适用于接收方)。
共享模型
可以使用 Databricks 到 Databricks 共享流共享模型。 请参阅将模型添加到共享(适用于提供方)和读取使用 Databricks 到 Databricks Delta 共享(适用于接收方)来共享的数据(适用于接收方)。
共享笔记本
可以使用 Delta Sharing 通过 Databricks 到 Databricks 共享流来共享笔记本文件。 请参阅将笔记本文件添加到共享(针对提供者)和阅读共享笔记本(针对接收者)。
限制行和列级别的访问
可以根据收件人属性共享限制对特定表数据进行访问的动态视图。 动态视图共享需要 Databricks 到 Databricks 共享流。 请参阅向共享中添加动态视图以筛选行和列。
Delta Sharing 和流式处理
Delta Sharing 支持 Apache Spark 结构化流式处理。 提供程序可以共享具有历史记录的表或流式处理表,以便收件人可以使用它作为结构化流源,以低延迟以增量方式处理共享数据。 接收者还可以对带历史记录的共享表执行 Delta Lake 时间旅行查询。
若要了解如何共享带历史记录的表,请参阅将表添加到共享。 若要了解如何将共享表用作流式处理源,请参阅使用 Apache Spark 结构化流式处理来查询表(适用于 Databricks 到 Databricks 共享的接收者)或使用 Spark 结构化流式处理来访问共享表(适用于开放共享数据的接收者)。
若要了解如何共享流式处理表,请参阅 向共享添加流式处理表。
另请参阅结构化流式处理概念。
Delta Lake 功能支持矩阵
当你共享表时,Delta Sharing 支持大多数 Delta Lake 功能。 该支持矩阵列出了:
- 需要特定版本 Databricks Runtime、开放源代码 Delta Sharing Spark 连接器或开放源代码 Delta Sharing Python 连接器的 Delta 功能。
- 部分受支持的功能。
功能 | 提供者 | Databricks 接收方 | 开源接收方 |
---|---|---|---|
删除向量 |
|
|
|
列映射 |
|
|
|
统一格式 |
|
|
|
V2 检查点 | 受支持但存在限制 | 受支持但存在限制 | 受支持但存在限制 |
TimestampNTZ | 支持 | Databricks Runtime 14.1+ | Delta Sharing Spark 连接器 3.3+ |
液体聚类分析 | 受支持但存在限制 | 受支持但存在限制 | 受支持但存在限制 |
Delta Sharing 常见问题解答
以下是有关 Delta Sharing 的常见问题解答。
是否需要 Unity Catalog 才能使用 Delta Sharing?
否,不需要 Unity Catalog 就可以共享数据(作为提供者)或使用共享的数据(作为接收者)。 但是,Unity Catalog 提供了一些优势,例如支持非表格和 AI 资产共享、现成的治理、简单性和查询性能。
提供者可以通过两种方式共享数据:
将资产置于 Unity Catalog 管理下共享,并使用内置的 Azure Databricks Delta Sharing 服务器共享这些资产。
无需将所有资产迁移到 Unity Catalog。 只需为 Unity Catalog 启用一个 Azure Databricks 工作区即可管理要共享的资产。 在某些帐户中,会自动为 Unity Catalog 启用新工作区。 请参阅 Unity Catalog 的自动启用。
实施开放的 Delta Sharing 服务器来共享数据,而无需使用 Azure Databricks 帐户。
接收者可以通过两种方式使用数据:
没有 Databricks 工作区。 使用可用于许多数据平台(包括 Power BI、pandas 和开放源代码 Apache Spark)的开放源代码 Delta Sharing 连接器。 请参阅读取使用 Delta Sharing 开放共享通过持有者令牌共享的数据(针对接收者)和 Delta Sharing 开放源代码项目。
在 Databricks 工作区中。 不需要为 Unity Catalog 启用收件人工作区,但如果启用了这些工作区,则具有治理、简单性和性能方面的优势。
想要这些优势的收件人组织不需要将所有资产迁移到 Unity Catalog。 只需一个启用了 Unity Catalog 的 Azure Databricks 工作区即可管理与你共享的资产。 在某些帐户中,会自动为 Unity Catalog 启用新工作区。 请参阅 Unity Catalog 的自动启用。
请参阅使用持有者令牌读取通过 Delta Sharing 开放共享来共享的数据(针对接收者)和读取使用 Databricks 到 Databricks Delta Sharing 共享的数据(针对接收者)。
是否需要成为 Databricks 客户才能使用 Delta Sharing?
否,Delta Sharing 是一种开放协议。 可以在任何数据平台上与接收者共享非 Databricks 数据。 提供者可以将开放的 Delta Sharing 服务器配置为从任何计算平台共享。 接收者可以使用开放源代码 Delta 共享连接器来消费共享数据,这些连接器适用于许多数据产品,包括 Power BI、pandas 和开放源代码 Spark。
但是,在 Azure Databricks 上使用 Delta Sharing 具有许多优点,尤其是从已启用 Unity Catalog 的工作区共享。
有关详细信息,请参阅此常见问题解答中的第一个问题。
如何产生和检查 Delta Sharing 费用?
在共享和访问视图、具体化视图和流式表时,会产生增量共享的成本。 共享有两种潜在的成本来源:
- 计算成本,由 Azure Databricks 收取。
- 存储和网络传输(出口)成本,由存储供应商收取。
执行计算并为其付费的方法取决于以下几个因素:
- 接收方计算类型
- 共享是在同一 Azure Databricks 帐户中还是跨帐户进行
下表介绍了使用 Delta Sharing 共享和访问视图的计费方法:
接收方计算 | 帐户关系 | 谁付费 | 用于计费的 SKU | 访问方法 |
---|---|---|---|---|
Databricks 无服务器 | 任意 | 收件人 | 接收方的无服务器 | 收件人接收对基础数据的直接访问 |
Databricks 经典版 | 同一帐户 | 收件人 | 接收方的经典 | 收件人接收对基础数据的直接访问 |
Databricks 经典版 | 不同的帐户 | 收件人 | 提供方的交互式无服务器 | 服务提供者执行筛选 |
打开 Delta 共享连接器 | 任意 | 提供者 | 提供方的交互式无服务器 | 服务提供者执行筛选 |
计费归属还可以通过计费使用情况系统表引用和 Delta Sharing 物化历史系统表参考进行查询。 如果接收方支付归属费用,则只有接收方可以在系统表中看到相关的记录。 有关示例查询,请参阅 示例查询。
Delta Sharing 是否会产生流出费用?
区域中的 Delta Sharing 不会产生出口费用。 与其他数据共享平台不同,Delta Sharing 不需要进行数据复制。 此模型具有许多优点,但也意味着在跨云或区域共享数据时,云供应商可能会收取数据流出费用。 Azure Databricks 支持从 Cloudflare R2 进行共享,这样不会产生流出费用,并提供其他工具和建议来监视和避免流出费用。 请参阅监视和管理 Delta Sharing 出口成本(针对提供者)。
收件人是否可以直接访问共享视图、具体化视图和流式处理表中的基础数据?
如果共享视图、具体化视图和流表位于同一 Azure Databricks 帐户中,或者使用不同帐户中的无服务器计算,则数据接收方只能直接访问共享视图、具体化视图和流式处理表。 否则,数据将在供应商端被物化和筛选。 数据具体化存储在共享数据资产的父存储位置下。
共享具体化资产时,计算会应用必要的筛选器并创建缓存在提供商存储中的临时具体化来处理请求。 本筛选的数据使用预签名的短生存期 URL 传递给收件人,确保安全访问,同时保持提供者与收件人之间的访问控制。
提供者是否可以撤销接收者访问权限?
是的,可以按需在指定的粒度级别撤销接收者访问权限。 可以拒绝接收者访问特定共享和特定 IP 地址、筛选接收者的表格数据、撤销接收者令牌和完全删除接收者。 请参阅撤销接收者对共享的访问权限和创建和管理 Delta Sharing 的数据接收者(Databricks 到 Databricks 共享)。
使用预签名 URL 不是不安全吗?
Delta Sharing 使用预签名 URL 来提供对对象存储中文件的临时访问。 它们仅提供给已有权访问共享数据的接收者。 它们之所以安全,是因为它们的生命周期很短,不会将访问级别扩展到超出收件人获得的访问级别的程度。
Delta Sharing 开放共享协议中使用的令牌是否安全?
由于 Delta Sharing 支持跨平台共享(与其他可用的数据共享平台不同),因此共享协议需要一个开放令牌。 提供者可以通过配置令牌生存期、设置网络控制以及按需撤销访问权限来确保令牌安全性。 此外,令牌不会将访问级别扩展到已经授予接收者的权限之外。 请参阅令牌的安全注意事项。
如果您不想使用令牌来管理共享的接收者访问权限,则应使用 Databricks 对 Databricks 共享或与 Databricks 客户团队联系以寻求替代方案。
Lakeflow Connect 和 Delta 共享之间的区别是什么?
使用 Delta Sharing 可以跨平台、云和区域安全地共享实时数据。 Databricks 建议使用托管连接器进行引入,因为它们可缩放以适应高数据量、低延迟查询和第三方 API 限制。 但是,你可能希望在不移动数据的情况下查询数据。
在管理型连接器和“增量共享”之间进行选择时,建议在以下情境选择“增量共享”:
- 限制数据重复。
- 查询尽可能最新的数据。
限制
- 表格数据必须采用 Delta 表格式。 可轻松地将 Parquet 表转换为 Delta 表,然后再转换回来。 请参阅 CONVERT TO DELTA。
- Delta Sharing 支持使用 liquid 聚类分析和 V2 检查点的表,但具有以下限制:
- 接收者只可运行快照查询。 这些表无法运行更改数据馈送 (CDF) 或进行实时流查询。
- 提供者无法通过分区筛选共享表。
- 提供方无法与液体聚类分析和 V2 检查点共享 R2 表。
- 表约束(主键和外键约束)在共享表中不可用。
- 必须在 Delta 表或其他可共享视图上定义可共享视图。 请参阅向共享添加视图(针对提供者)和读取共享视图(针对接收者)。
- 笔记本共享仅在 Databricks 到 Databricks 共享中受支持。 请参阅向共享添加笔记本文件和读取使用 Databricks 到 Databricks Delta 共享(适用于接收方)共享的数据。
- 卷共享仅在 Databricks 到 Databricks 共享中受到支持。 请参阅将卷添加到共享(适用于提供方)和读取使用 Databricks 到 Databricks Delta 共享(适用于接收方)共享的数据。
- 只有 Databricks 到 Databricks 共享中支持模型共享。 请参阅将模型添加到共享(针对提供方)和读取使用 Databricks 到 Databricks Delta Sharing 共享的数据(针对提供方)。
- 对于共享表,元数据中允许的文件数量存在限制。 若要了解详细信息,请参阅超出资源限制错误。
- 名为
information_schema
的架构无法导入到 Unity Catalog 元存储中,因为该架构名称已在 Unity Catalog 中保留。 - Delta Sharing 不支持
SHALLOW CLONE
表共享。 Azure Databricks 不支持为引用绝对路径的 Delta 日志预先签署 URL。 - Delta Sharing 不支持共享启用了排序规则的表。
- Delta Sharing只能将UniForm表读取为Delta表。
- Delta 共享不支持与 Apache Iceberg 读取器客户端共享。
另请参阅 Delta Lake 功能支持矩阵。
资源配额
Azure Databricks 针对所有 Delta Sharing 安全对象强制实施资源配额。 这些配额列在资源限制中。 如果预期超过这些资源限制,请联系 Azure Databricks 帐户团队。
可以使用 Unity Catalog 资源配额 API 来监视配额使用情况。 请参阅监视你对 Unity Catalog 资源配额的使用情况。