4. 数据共享机制总览

在 Databricks 的协作体系中,“共享”并不是单一功能,而是一组面向不同边界、不同信任级别、不同数据形态的机制组合。很多团队在落地时最容易犯的错误,是把 Delta Sharing、Marketplace、外部位置、外部表当成可以互相替代的选项,结果要么把敏感数据暴露给了不该看到的人,要么为了“安全”把本可以实时共享的数据复制了十几份。理解这些机制的适用边界,本质上是在回答三个问题:数据在谁的存储里、元数据由谁管理、访问者以什么身份和协议读取。

先看整体关系。Delta Sharing 是一种开放协议,它把“共享”从“复制数据”变成“授权读取”。提供方在自己的 Unity Catalog 中定义 Share,把表、视图、卷、Notebook 等对象放进去,再授权给接收方。接收方不需要和提供方在同一个云账号、同一个工作区,甚至不需要使用 Databricks——只要支持 Delta Sharing 协议的客户端(如 Power BI、pandas、Spark)就能读取。它的关键特征是:数据不移动,接收方按提供方授予的凭据和权限读取。这使它非常适合跨组织、跨云、跨平台的受控共享。

Marketplace 则建立在 Delta Sharing 之上,解决的是“发现与分发”的问题。提供方把数据产品发布为 Listing,接收方在 Marketplace 中浏览、申请、订阅,订阅后自动获得一个共享挂载点。它适合数据产品化、对外商业化或集团内多团队自助获取的场景。换句话说,Delta Sharing 是协议和通道,Marketplace 是目录和交易层。没有 Marketplace,Delta Sharing 依然可用;没有 Delta Sharing,Marketplace 的跨组织分发就失去基础。

外部位置(External Location)和外部表(External Table)属于另一条线:它们处理的是“数据已经在云存储里,如何让 Databricks 安全地访问”。外部位置把云存储路径(如 s3://bucket/path、abfss://container@account.dfs.core.windows.net/path)与一个存储凭据绑定,并授予 Unity Catalog 托管权限。外部表则是在外部位置上定义的表,元数据由 Unity Catalog 管理,但数据文件仍在外部存储中。它们不解决“跨组织共享”,而是解决“同一组织内、数据留在数据湖、由 UC 统一治理”的问题。

数据共享机制:数据位置 · 元数据归属 · 访问协议 提供方(Provider) Unity Catalog Share / Schema / Table / Volume 云存储(自有账号) Delta 表 / Parquet / 文件 外部位置 External Location 路径 + 存储凭据 + UC 授权 外部表 External Table 元数据在 UC,数据在外部存储 Marketplace Listing 数据产品发布与订阅 接收方(Recipient) Databricks 工作区 挂载共享 / 查询 非 Databricks 客户端 Power BI / pandas / Spark Marketplace 订阅 自动获得共享挂载点 同组织内团队 通过 UC 权限访问 外部消费者 跨云 / 跨平台 / 跨组织 Delta Sharing 协议 开放读取(不复制数据) Marketplace 订阅分发 同组织 UC 权限 外部表 / 外部位置 实线 = 跨组织共享通道(Delta Sharing / Marketplace) 虚线 = 同组织内治理访问(外部位置 / 外部表 / UC 权限)

把这张图读透,适用边界就清晰了。第一层边界是信任边界:跨组织共享必须走 Delta Sharing 或 Marketplace,因为接收方不在你的云账号内,你无法用 UC 的组权限直接管它;同组织内则优先用 UC 权限 + 外部位置/外部表,避免不必要的协议开销。第二层边界是数据是否移动:Delta Sharing 不复制数据,接收方读的是提供方存储上的文件;如果你需要接收方在自己的存储里有一份独立副本,那就要在订阅后自行物化,这属于接收方的选择,而不是共享机制本身。第三层边界是元数据归属:外部表的元数据在 UC,数据在外部存储,删除表不会删除数据;托管表的元数据和数据都由 UC 管理,删除表会连带删除数据。这个差异直接影响生命周期管理和成本归属。

实际落地时,可以用一个简单的判断路径来选型。假设你要把一张 sales_orders 表给外部合作伙伴,对方使用 Power BI:走 Delta Sharing,创建 Share、添加表、授权 Recipient,对方用凭据文件连接即可。假设你要把同一张表给公司内另一个工作区的分析团队:如果两个工作区在同一个 UC Metastore 下,直接授予 SELECT 权限即可,不需要 Delta Sharing;如果不在同一 Metastore,才考虑共享。假设你的原始数据已经在 ADLS 里,想让数据工程师用 Databricks 直接查询而不搬迁:创建 External Location 指向该路径,再建 External Table,元数据进 UC,数据留在原地。假设你想把一张精心加工的表作为数据产品对外发布、支持自助订阅:用 Marketplace Listing,底层仍然是 Delta Sharing。

一个常见的误区是“共享等于复制”。Delta Sharing 的设计恰恰相反:接收方读取时,数据仍留在提供方存储,提供方可以随时撤销授权,撤销后接收方立即失去访问能力。这使得它比“导出 CSV 再发送”安全得多,也比“复制到对方账号”更容易治理。

还有两个容易忽略的边界条件。其一是网络与区域:Delta Sharing 的接收方需要能访问提供方的共享端点,跨区域时延迟和出口费用需要评估;如果双方都在同一云区域内,体验最好。其二是对象类型:Delta Sharing 支持表、视图、卷、Notebook 等,但并非所有 UC 对象都能共享,具体以当前运行时支持列表为准;外部位置和外部表则主要围绕文件和表,不涉及 Notebook 共享。选型时先确认“要共享的对象类型”,再确认“接收方身份”,最后确认“数据是否允许留在原地”,三步就能收敛到正确机制。

总结成一句可操作的判断:跨组织、不复制、按协议读,选 Delta Sharing;要发现和分发数据产品,选 Marketplace;同组织、数据在湖上、要 UC 统一治理,选外部位置与外部表。四者不是竞争关系,而是覆盖了从“存储接入”到“跨域分发”的完整光谱,理解各自的位置,才能在设计共享方案时不越界、不冗余。