3. 数据共享机制总览

Snowflake 的“数据共享”并不是单一功能,而是一组围绕数据所有权、访问方式、时效性、治理边界和成本归属设计的机制组合。很多团队在落地时容易把所有需求都塞进“共享”里,结果要么权限过宽,要么复制成本失控,要么跨区域访问延迟不可接受。理解每种机制的适用边界,比记住功能名称更重要。

下面这张图把六种机制放在同一条“数据是否离开原账户、是否产生副本、是否跨区域”的判断轴上,便于快速定位。

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 分钟的数据滞后。若业务要求强实时,跨区域复制并不合适,应改为让消费方直接访问源区域并接受延迟。

五、选型决策表

机制是否产生副本时效消费方典型场景
共享 / 直接共享否实时已知、同区域总部对分公司、固定伙伴
列表否实时可发现、可订阅内部数据目录、私有发布
市场否实时公开/商业对外数据产品
数据交换否实时多参与方封闭集合行业联盟、供应链
跨区域复制是分钟级异地消费方合规驻留、低延迟、灾备
选型口诀:能共享就不复制,能直接就不发布,跨区域才复制,多参与方才交换。先判断“数据是否必须离开原账户”,再判断“消费方是否已知”,最后判断“是否跨区域”,三步即可收敛到合适机制。
常见误区:把跨区域复制当成“共享的加速版”。复制会带来存储成本、刷新延迟和数据一致性窗口,且副本需要单独治理。若消费方只是偶尔查询,直接共享加网络延迟可能比维护副本更划算。

最后强调治理边界:无论使用哪种机制,授权粒度、行级安全策略、数据脱敏和访问审计都必须在提供方侧统一设计。共享和列表不会自动继承源表的行访问策略,跨区域副本也需要在目标区域重新确认策略生效情况。机制选择解决“怎么连”,治理设计解决“连了之后能看到什么”,两者必须一起考虑。