3. 数据共享机制总览
Snowflake 的“数据共享”并不是单一功能,而是一组围绕数据所有权、访问方式、时效性、治理边界和成本归属设计的机制组合。很多团队在落地时容易把所有需求都塞进“共享”里,结果要么权限过宽,要么复制成本失控,要么跨区域访问延迟不可接受。理解每种机制的适用边界,比记住功能名称更重要。
下面这张图把六种机制放在同一条“数据是否离开原账户、是否产生副本、是否跨区域”的判断轴上,便于快速定位。
一、共享与直接共享:最轻量的零副本路径
共享(Share)是 Snowflake 最核心的机制:提供方创建一个 Share 对象,把数据库、模式或表授权给该 Share,再把 Share 授予消费方账户。消费方通过 CREATE DATABASE ... FROM SHARE 挂载为只读数据库。数据始终留在提供方账户,消费方读取的是提供方的存储,不产生副本、实时一致。
直接共享通常指账户对账户的定向共享,是 Share 的典型用法。它适合消费方明确、关系稳定的场景,例如总部向区域分公司开放订单明细。关键操作是:提供方在 ACCOUNTADMIN 下创建 Share,用 GRANT SELECT ON TABLE ... TO SHARE 授权,再用 ALTER SHARE ... ADD ACCOUNT 指定消费方账户。消费方挂载后即可查询。
两者的边界很清楚:同区域、消费方已知、要求实时、不希望复制成本时优先使用。若消费方在另一区域,直接共享会因跨区域访问产生延迟和出网费用,此时应评估跨区域复制。
二、列表与市场:面向“未知消费方”的发现机制
列表(Listing)是 Snowflake 数据交换体系中的发布单元。提供方把数据产品发布为 Listing,可设置为私有(仅指定账户可见)或公开。消费方在 Snowsight 中浏览、申请、订阅,订阅后同样以只读数据库形式挂载。列表的价值在于自助发现和订阅流程,而不是新的存储机制。
市场(Marketplace)是公开或商业化的列表集合,适合把数据作为产品对外提供,例如行业指标、气象数据、金融行情。它强调数据产品的描述、定价、使用条款和订阅管理。
列表与市场的适用边界是:消费方不固定、需要自助发现、需要标准化订阅流程时使用。若只是两三个内部团队之间的固定共享,用直接共享更简单,不必引入列表的发布和审批开销。
三、数据交换:多参与方的受控协作
数据交换(Data Exchange)是面向一组参与方的受控共享空间。提供方创建 Exchange,邀请多个成员账户加入,成员之间可以发布和订阅数据。它适合行业联盟、集团多子公司、供应链上下游等多对多协作场景。
与直接共享相比,数据交换增加了成员管理和发布治理层;与市场相比,它不面向公众,而是封闭的参与方集合。选择依据是:参与方多于两方、需要统一治理、但不希望公开时使用数据交换。
四、跨区域复制:解决地理与合规边界
跨区域复制(Replication)把数据库、共享或账户对象复制到另一个区域或云平台。它产生物理副本,通过刷新频率控制时效,通常为分钟级而非实时。典型用途包括:为异地消费方降低访问延迟、满足数据驻留合规、构建灾备。
关键参数是复制组(Replication Group)和刷新计划。例如把 sales_db 加入复制组,目标区域设为 eu_central_1,刷新间隔设为 10 分钟。消费方在目标区域挂载副本后,读取的是本地副本,延迟低但存在最多 10 分钟的数据滞后。若业务要求强实时,跨区域复制并不合适,应改为让消费方直接访问源区域并接受延迟。
五、选型决策表
| 机制 | 是否产生副本 | 时效 | 消费方 | 典型场景 |
|---|---|---|---|---|
| 共享 / 直接共享 | 否 | 实时 | 已知、同区域 | 总部对分公司、固定伙伴 |
| 列表 | 否 | 实时 | 可发现、可订阅 | 内部数据目录、私有发布 |
| 市场 | 否 | 实时 | 公开/商业 | 对外数据产品 |
| 数据交换 | 否 | 实时 | 多参与方封闭集合 | 行业联盟、供应链 |
| 跨区域复制 | 是 | 分钟级 | 异地消费方 | 合规驻留、低延迟、灾备 |
最后强调治理边界:无论使用哪种机制,授权粒度、行级安全策略、数据脱敏和访问审计都必须在提供方侧统一设计。共享和列表不会自动继承源表的行访问策略,跨区域副本也需要在目标区域重新确认策略生效情况。机制选择解决“怎么连”,治理设计解决“连了之后能看到什么”,两者必须一起考虑。