3. 共享类型全览

Snowflake 的数据共享并不是单一功能,而是一组围绕“谁把什么数据、以什么方式、给到谁、受什么约束”展开的能力集合。很多团队在第一次设计共享方案时,容易把所有需求都塞进 CREATE SHARE 里,结果要么治理失控,要么协作效率低下。真正有效的做法,是先判断共享的对象范围、消费方身份、发现方式、访问控制粒度,再选择匹配的共享类型。本节把六种常见共享形态放在同一张“适用场景地图”上对比,帮助你在真实项目中快速定位。

六种共享形态的核心差异

直接共享(Direct Share)是最基础的形式:提供方在自己的账户中创建共享对象,把数据库、模式或表授权给该共享,再通过 ALTER SHARE ... ADD ACCOUNT 指定一个或多个消费方账户。消费方在自己的账户中创建数据库并挂载共享,即可只读查询。它适合点对点、消费方明确、数量有限的场景,例如总部把销售明细共享给三家区域子公司。优点是控制直接、延迟低;缺点是每新增一个消费方都要显式添加账户,规模一大就难以维护。

列表共享(Listing Share)把共享包装成“列表(Listing)”,可以发布到 Snowflake Marketplace 或组织内部的数据交换中。与直接共享相比,列表共享的关键变化是从“指定账户”变成“可被发现”。提供方可以设置列表的可见范围、是否自动授予、是否允许试用,消费方通过浏览或搜索找到并“获取(Get)”列表。它适合一对多、消费方不固定、需要自助发现的场景,例如某数据供应商把行业指标开放给所有潜在客户。

数据交换(Data Exchange)是组织内部或跨组织的“共享空间”。多个提供方和消费方加入同一个交换,提供方发布列表,消费方按权限获取。它解决的是“多对多”协作问题:例如一个集团有 20 个事业部,每个事业部既提供数据也消费数据,用直接共享会形成网状连接,而数据交换把连接收敛到一个中心空间,治理和审计都更清晰。

数据市场(Marketplace)可以理解为公开或半公开的数据交易与分发平台。提供方发布列表,消费方按需获取,部分列表支持付费、试用或自动更新。它适合对外商业化数据、行业公共数据分发,以及需要品牌曝光和自助采购的场景。与数据交换的区别在于:市场更偏“开放发现与交易”,交换更偏“受控协作”。

私有共享(Private Share)强调“不公开、不进入市场、仅限指定对象”。它通常仍以直接共享或私有列表的形式实现,但治理策略上明确禁止公开发现,适合涉及敏感数据、合规要求高、只允许特定合作方访问的场景,例如银行与审计机构之间的受限数据交换。

外部共享(External Share)指跨组织、跨账户的共享,消费方不在同一 Snowflake 组织内。它可以是直接共享、列表共享或市场共享,重点在于“外部”这一关系属性。设计时要额外关注数据出境合规、消费方账户区域、复制(Replication)与故障转移、以及是否允许消费方再次转发。

共享类型选择:从“指定账户”到“开放发现”的光谱 横轴:消费方确定性与发现方式 纵轴:治理强度与协作规模 点对点 · 消费方明确 开放发现 · 消费方不固定 直接共享 Direct Share • 显式 ADD ACCOUNT • 消费方数量有限 • 控制直接、延迟低 • 例:总部→区域子公司 私有共享 Private Share • 不公开、不进入市场 • 仅限指定合作方 • 合规与敏感数据优先 • 例:银行↔审计机构 列表共享 Listing Share • 包装为可发现列表 • 消费方自助 Get • 可设试用/自动授予 • 例:供应商开放指标 数据交换 Data Exchange • 多对多共享空间 • 提供方与消费方共存 • 收敛网状连接 • 例:集团 20 个事业部 数据市场 Marketplace • 公开/半公开发布 • 支持付费与试用 • 自助采购与发现 • 例:行业数据商业化 外部共享 External Share • 跨组织、跨账户 • 关注出境合规 • 复制与故障转移 • 例:跨境合作方 快速判断: 消费方明确且少 → 直接共享;需要自助发现 → 列表共享;多对多协作 → 数据交换;公开交易 → 数据市场;敏感受限 → 私有共享;跨组织 → 外部共享。 注意:外部共享是关系属性,可与直接/列表/市场叠加;私有共享是治理策略,通常以直接或私有列表落地。

如何根据场景做选择

把六种形态放在一起看,会发现它们并不是互斥的“六选一”,而是三个维度的组合:发现方式(指定账户 vs 可发现列表)、协作拓扑(点对点 vs 多对多 vs 开放市场)、治理边界(内部 vs 外部、公开 vs 私有)。实际项目中,最常见的组合是“外部共享 + 列表共享”或“外部共享 + 直接共享”。

举一个可操作的判断例子。假设某零售集团要把门店销售数据共享给三类对象:三家全资子公司、一个行业数据联盟、以及一家外部咨询公司。合理的方案是:三家子公司用直接共享,因为账户明确、数据敏感、需要精确控制;行业数据联盟用数据交换,因为联盟内多家企业既提供也消费数据,用交换可以避免两两建立共享;外部咨询公司用私有列表共享,既能让对方自助获取,又不进入公开市场。这样一套组合,比全部用直接共享更易维护,也比全部丢进市场更安全。

关键参数与治理要点

无论选择哪种类型,都需要关注几个共享层面的参数与约束。第一是授权粒度:可以共享数据库、模式、表、视图、安全视图、外部表、Iceberg 表等,粒度越细,治理越灵活,但维护成本越高。第二是消费方权限:共享默认只读,消费方不能修改数据,但可以基于共享数据创建自己的视图或物化视图(受限于提供方是否允许)。第三是刷新与延迟:直接共享和列表共享通常近实时,因为消费方直接查询提供方账户中的存储;如果使用复制,则存在复制延迟,需要根据业务容忍度设置刷新频率。第四是审计与撤销:提供方可以随时 REVOKE 或 ALTER SHARE ... REMOVE ACCOUNT,消费方会立即失去访问;对于列表共享,还可以设置列表过期时间。

一个实用原则:先定治理边界,再定发现方式,最后定拓扑。如果数据涉及个人信息、财务或合规敏感字段,优先考虑私有共享或带安全视图的直接共享;如果只是公开指标,再考虑列表或市场。

常见误区与排障提示

实践中容易踩的坑包括:把“外部共享”当成一种独立于直接/列表的第四种类型,导致设计时重复建设;在数据交换中忘记设置消费方的默认角色,导致对方获取列表后无法查询;使用列表共享时未配置自动授予,消费方每次都要手动确认;以及跨区域共享时忽略复制成本,导致查询延迟超出预期。排障时可以先确认三件事:共享对象是否已 GRANT 给共享、消费方账户是否已 ADD 或已获取列表、消费方是否用正确角色挂载了共享数据库。

总结来说,直接共享适合“我知道给谁”,列表共享适合“我希望被找到”,数据交换适合“一群人互相给”,数据市场适合“公开卖或公开送”,私有共享适合“只能给指定的人”,外部共享则回答“是不是跨出了我的组织”。把这六个问题问清楚,共享类型的选择就不再依赖直觉,而是有据可依。