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