跳至主要内容

Snowflake 数据共享:2026 年完整指南

了解如何在 Snowflake 中共享数据。掌握设置、访问控制、计费,以及在 Snowflake 中实现安全、可扩展数据共享的最佳实践。
· 13分钟 阅读

使用 AI 探索

Snowflake 提供了专门的架构,以在各种环境中实现安全高效的数据共享。无论是在组织内部协作,还是与外部合作伙伴协作,Snowflake 都提供了多种按用途打造的选项,例如直接共享、数据交换以及 Snowflake Marketplace。

在企业环境中,这些功能既能实现无缝协作,又能控制成本并确保强大的安全性。本文旨在帮助您理解每种共享方式,并提供在真实场景中有效使用它们的实用指南。如果您是 Snowflake 新手,建议先查看我们的 Snowflake Foundations 技能路径。

什么是 Snowflake 数据共享?

传统上,数据共享依赖 ETL(抽取、转换、加载)流程,即从源系统抽取数据并加载到目标系统。这种方法需要复制并实际移动数据,会消耗存储和计算资源。

Snowflake 消除了复制或实际移动数据的需要。借助 Snowflake 的数据共享架构,一个账户(提供方)可以向另一个账户(使用方)授予对特定数据集的实时只读访问权限,而无需传输或重复数据。

使用方可以像本地数据一样对其进行查询,即使数据实际存储在提供方的账户中。由于数据保留在一个位置,提供方只承担存储成本,使这种方式在跨账户协作中更高效且具备良好的可扩展性。

Snowflake 数据共享如何运作?

Snowflake 使用元数据指针实现安全的零拷贝数据共享,而不是在系统之间复制或移动数据。它在提供方账户中创建对原始对象的引用,使用方通过访问该引用来查询共享数据。

使用方被授予只读访问权限,这意味着他们可以读取和探索数据,但不能修改源数据。由于使用方直接查询提供方的存储而不进行数据复制,使用方账户不产生存储成本。

此外,Snowflake 的架构将计算与存储分离,支持高性价比的数据操作。提供方负责其使用的存储成本及任何计算资源,而使用方只为自己使用的计算资源付费。

Snowflake 的数据共享也具有可扩展性。每个拥有共享数据访问权限的 Snowflake 账户都可以创建自己的虚拟仓库并独立运行查询,从而进一步支持可扩展的数据共享。

此外,Snowflake 集成了治理与安全控制来管理共享访问。提供方可以通过基于角色的访问控制定义数据可见性,并使用审计日志监控使用情况。这些功能确保对共享数据的完全可见性与控制。

在 Snowflake 中共享数据的方式 

Snowflake 的数据共享有多种形式,分别针对不同的使用场景。下面我们来了解不同的数据共享能力,以便您知道何时使用哪一种。

直接共享

使用直接共享可以在同一 Snowflake 区域内与多个用户共享数据。您创建一个共享对象,其中包含选定的数据库、表和视图,然后将访问权限授予特定的使用方 Snowflake 账户。必须显式列出每个可以访问数据的账户。

使用方会基于该共享创建数据库并直接进行查询。该数据库不占用数据存储;它是对共享数据的逻辑引用。

直接共享仅在您在相同云服务商与相同区域内共享数据时有效。它非常适合与内部团队、可信赖的业务伙伴或少量 Snowflake 账户共享数据。该设置最适用于一对一或一对少的关系。

数据交换

当您需要与众多使用方账户或群组共享数据时,直接共享会变得低效,因为您必须逐一指定每个 Snowflake 账户。在这种情况下,数据交换是更好的选择。

通过数据交换,您可以将数据集作为数据产品发布在私有市场中,并邀请使用方群组访问。此设置就像一个可搜索的目录,使用方可以浏览并订阅所需数据。由于交换是私有的,只有受邀的内部账户或群组才能访问。

借助 Snowflake 的数据复制,可以实现跨区域或多云的数据共享,使数据交换非常适合在大型组织的不同业务单元或特许经营之间进行共享。

例如,如果您希望与公司内的不同团队共享客户销售数据,可以创建一个名为“customer_behaviour_data”的私有 Snowflake 数据交换,并发布同一数据集的多个清单,每个清单设置不同的访问权限。各团队可以订阅满足其数据需求的清单,从而在不同访问级别的团队之间促进更顺畅且更安全的协作。

Snowflake Marketplace

Snowflake Marketplace 的运作方式类似苹果的 App Store,但面向数据。它是一个公共市场,提供方可以向任何 Snowflake 用户共享数据产品。提供方创建清单、添加元数据、提供预览并设置使用条款,便于使用方轻松找到所需内容。

发布时,提供方可以选择公共清单(对所有 Snowflake 客户可见)或私有清单(仅对选定账户可见)。

使用方可以使用相关关键词在 Marketplace 中搜索。对于公共清单,他们可以直接订阅;对于私有清单,则需申请访问。批准后,他们可以在自己的 Snowflake 账户中直接查看并查询这些数据集。

Snowflake Marketplace 支持按使用量计费和订阅定价的付费清单。计费由 Snowflake 处理(例如通过 Stripe),并可为符合条件的使用方抵扣合同容量。例如,一家金融公司可能会出售包含实时股票数据和历史价格的套餐。Snowflake 将根据提供方的定价模型和实际使用情况向用户收费。

阅读器账户

Snowflake 阅读器账户允许您与没有 Snowflake 账户的第三方共享数据。

提供方无需要求使用方自行设置并支付 Snowflake 费用,而是代表他们创建并管理阅读器账户。

然后,提供方使用共享将数据库共享给阅读器账户,并将这些账户提供给使用方。需注意,阅读器账户只能消费创建它的提供方账户中的数据。

阅读器账户主要用于查询共享数据集。阅读器账户中通过虚拟仓库产生的任何计算费用都计入提供方账户。为限制使用量,您可以为该仓库设置资源监控器。

数据提供方与使用方概览

既然您已了解 Snowflake 中不同类型的数据共享,让我们来认识数据提供方与使用方。各自的职责是什么?在共享或访问数据时应注意哪些限制?

关于提供方

在 Snowflake 中,数据提供方拥有其希望共享的数据。他们对共享数据拥有完全控制权,并可决定共享哪些数据以及谁可以访问。其通常负责:

  • 定义共享的内容及共享对象
  • 授予或撤销访问权限 
  • 确保共享数据干净、可靠且保持最新
  • 通过日志审计访问并追踪使用情况以满足合规要求

为确保安全可靠地共享数据,提供方应遵循以下最佳实践:

  • 使用安全视图,仅暴露必要的列或行,并对敏感或原始数据进行脱敏
  • 应用元数据目录,以便更易发现和理解共享资产
  • 纳入血缘追踪与日志记录,以监控共享数据集的变更
  • 实施基于角色的访问控制,确保只有获授权的用户才能访问特定数据

关于使用方

使用方是 Snowflake 数据共享的接收者。他们不拥有数据;相反,他们使用自己的计算资源查询提供方共享的数据。这意味着使用方负责访问与分析数据。

由于他们不为存储付费,其主要职责是管理自己的虚拟仓库并优化查询效率,以获得最佳的计算成本表现。 

如果通过阅读器账户进行查询,其使用的计算资源也将计入提供方的账单。

使用方的主要限制是他们只能读取共享数据,不能修改、插入或删除数据集中的记录。此外,使用方不会看到提供方的任何内部变更;他们始终看到可用的最新版本数据。 

在 Snowflake 中实施数据共享

我们已经介绍了帮助您在 Snowflake 中开始数据共享的关键概念。无论您是在设置提供方资料、配置使用方账户,还是管理阅读器账户,本节都会一一说明。

设置为数据提供方 

要将数据发布到 Snowflake Marketplace 或私有数据交换,您首先必须设置提供方资料。提交提供方资料请求后,Snowflake 会审核并批准您的公司信息。获批后,您即可开始创建并发布清单。

以下是设置提供方资料的步骤:

  • 步骤 1:登录您的 Snowflake 账户。
  • 步骤 2:确保您处于ACCOUTADMIN 角色。
  • 步骤 3:在左侧边栏点击Data Products,然后选择Provider Studio。

snowflake dashboard provider studio

  • 步骤 4:选择Profiles 选项卡,然后点击Create Profile 按钮,如下图所示。

creating the new provider profile in the Snowflake

  • 步骤 5:在弹出的表单中填写必需的组织与联系信息,完成提供方资料设置。

Adding credentials to then provider profile in Snowflake.

设置为数据使用方

  • 步骤 1:登录您的 Snowflake 账户。
  • 步骤 2:在左侧边栏点击Data Products,然后选择Private Sharing。

Enabling private sharing in Snowflake

  • 步骤 3:前往Shared with You 选项卡,查看共享给您的数据。

与阅读器账户共享 

步骤 1:登录您的 Snowflake 账户。 

步骤 2:在左侧菜单中选择Admin 和Accounts。

Setting up then reader accounts in snowflake

步骤 3:选择Accounts 选项卡,然后进入Reader Accounts 子选项卡。 

步骤 4:要添加新的阅读器账户,点击右上角的+Reader Account 按钮,然后在弹窗表单中填写必填信息。

Adding credentials to the reader account

安全架构

Snowflake 中的数据共享本身就是安全的,因为使用方仅有只读权限,不能修改、插入或删除任何共享数据。为在默认的访问控制之外进一步加强安全性,Snowflake 还遵循以下措施:

安全数据对象

您可以共享表、安全视图和安全 UDF;非安全视图不可共享。安全视图可防止使用方访问底层基表或查看定义视图所使用的 SQL 逻辑。这确保了敏感业务逻辑、专有计算或自定义函数对终端用户保持隐藏。

安全视图还支持行级访问策略和列级脱敏,非常适合实施精细化的数据访问控制。您可以将这些策略与基于角色的访问控制结合使用,确保每位使用方只看到其获授权查看的数据。

Snowflake 还允许针对内部与外部共享分别实现独立的模式。例如,您可以在一个模式中存放原始、敏感的数据集,并在另一个模式中仅暴露脱敏或汇总后的视图,从而限制使用方对敏感数据的访问。 

跨区域安全

在直接共享中,Snowflake 会在同一区域与同一云平台内共享元数据和指向原始对象的指针。但如果使用方账户位于另一区域或云平台,直接共享不起作用,这时就需要复制功能。 

提供方首先将数据复制到存在使用方账户的区域。然后创建一个指向已复制数据的共享对象,并授予使用方访问权限。使用方随后以只读方式查询复制的数据,与直接共享的使用方式相同。

Snowflake 通过对静态与传输中的复制数据进行加密来实现保护。 

此外,数据复制遵循 Snowflake 控制的内部数据路径,而非公网路由。与直接共享类似,使用方从不拥有复制出的数据库;始终是只读访问。 

Snowflake 数据共享最佳实践 

这些最佳实践可保护敏感数据、优化资源使用并确保符合数据隐私法规,从而在不同环境中实现可扩展的协作。

治理框架

强有力的治理框架可确保数据共享能以合适的访问权限触达正确的用户。它可防止滥用,并使所有访问与行为可追踪。 

从数据分类开始。清晰地为您的数据打上敏感、受限或公共等标签,并施加类别特定的安全控制,以最小化风险并防止意外泄露。

纳入定期的访问审查与使用审计。某位用户在六个月前需要访问权限,并不代表他们今天仍然需要。因此请定期审查并更新权限,使访问与当前角色和职责保持一致。

使用 Snowflake 访问日志来监控共享数据的使用情况。这些日志会记录谁在何时多频繁地查询了数据以及执行了哪些操作,有助于合规与性能调优。

为实施精细的访问控制,请利用行级与列级安全。列级脱敏在暴露数据集其余部分的同时隐藏敏感字段。行级策略可让您基于用户角色或属性限制对特定记录的访问。

性能优化

除了保障共享数据安全外,提供方还需负责优化数据集性能,以确保使用方能够高效访问与查询。

在 Snowflake 中使用聚簇键来提升查询性能并提高存储效率。这类似于对表进行分区。例如,如果您的销售数据集经常基于“price”和“region”进行查询,可以将它们设为聚簇键。Snowflake 会在物理层面组织底层数据,使具有相似“price”和“region”值的行彼此相邻存储,从而实现更快的访问和更高效的查询。 

对于常用的业务指标,可在基础数据集旁共享物化视图。这意味着预计算诸如按区域的月度收入、每周平均销售额或促销次数等指标,并与底层数据一同共享。使用方可以直接查询这些视图,从而在不同用例中同时提升性能与一致性。

验证与更新数据共享

共享准确的数据是高效利用 Snowflake 数据共享的关键。为确保数据质量,请将共享数据与源数据进行验证。比对行数、运行聚合或统计摘要检查,并执行模式完整性、空值检查和元数据校验。这些验证可确保您共享的是完整且准确的数据。 

在多个数据共享中新增数据源或更改模式可能难以管理。为简化迁移,请共享视图而非原始表。视图充当灵活层,允许您更改底层数据结构或后端表,而不影响使用方的查询。

在更新共享数据集时,请使用版本控制。带版本的视图或模式版本可帮助您追踪变更、测试新逻辑,并在出现问题时回滚。

请提前告知使用方即将发生的可能影响共享数据的变更。简单的提前通知可让用户有时间适应并为过渡做好准备。

限制与注意事项 

Snowflake 数据共享带有一些内置限制。并非致命问题,但需要提前规划。 

并非所有对象类型都可共享。您可以共享表、安全视图和安全 UDF。您不能共享非安全视图、存储过程、文件阶段以及任务或流。 

虽然 Snowflake Marketplace 和数据交换可以跨区域共享数据,但直接数据共享只能在同一区域与同一云环境内进行。要绕过此限制,您需要使用 Snowflake 的跨区域/跨云复制(需要企业版或更高版本)。 

使用方对共享数据仅有只读权限,不能修改、插入或删除记录。如果需要对数据进行转换或写入,他们必须将其复制到自己的环境中,这会带来额外的存储和计算成本。

结语

在 Snowflake 中有效使用数据共享,可以释放安全、低成本协作的全部潜力。提供方可向使用方共享可实时查询的数据,而无需 ETL 或数据重复。对源数据的任何更新都会即时反映到使用方账户,确保访问到最新信息。

通过采用 Snowflake 的数据共享模型,组织能够扩展分析协作、加强治理,并最大化数据资产的价值。不过,仅当使用方不需要编辑共享数据时,这种方式才真正有用。 

如果您是 Snowflake 新手,请先从这篇适合初学者的 Snowflake 学习指南开始。若想进一步提升,请查看我们的 Snowflake Foundations 技能路径 和 Snowflake 数据建模课程。

Snowflake 数据共享常见问答

Snowflake 如何在共享过程中确保数据安全?

Snowflake 使用零拷贝架构,通过安全的元数据指针向使用方提供只读访问。同时,在共享数据时默认使用安全视图。

Snowflake 中直接共享与数据交换的主要区别是什么?

直接共享用于在同一区域内与特定 Snowflake 账户共享数据,适合一对一或一对少的共享场景。数据交换适用于可扩展的数据共享,提供方将数据发布到市场,使用方从中获取访问。

在 Snowflake 中使用安全视图进行数据共享有哪些好处?

安全视图可防止使用方查看底层基表与 SQL 逻辑。它们支持行级与列级安全,实现对可见性的精细化控制。

在 Snowflake 中哪些对象可以共享?

您可以共享表、视图(标准、安全)、物化视图、UDF、序列、外部表和安全函数。

我们能否跟踪共享数据的使用情况?

可以。Snowflake 提供访问历史与查询历史,可用于监控共享对象的使用方式、访问者及时间,有助于审计与治理。

Srujana Maddula

作者

Srujana Maddula

Srujana 是一名自由职业技术写作者,拥有计算机科学四年制学位。她擅长撰写各类主题的内容,包括数据科学、云计算、开发、编程、安全等众多领域。她热爱经典文学,也喜欢探索新的旅行目的地。

主题