Snowflake 零拷贝克隆

2025年8月1日 | 阅读 7 分钟

Snowflake Zero Copy Cloning 的强大之处

为解决这些问题,Snowflake 开发了革命性的 Zero Copy Clone(零拷贝克隆)概念。这项功能通过简化数据复制并引入克隆的概念,彻底改变了数据管理的方式。

轻松克隆: 曾经困难的表或数据库克隆过程通过零拷贝克隆变得更加简单。消除了复杂性,使得更广泛的用户都可以使用。

无额外存储费用: 与传统的复制技术不同,零拷贝克隆不需要额外的存储费用,消除了创建重复数据副本的经济负担。

快速复制: 通过消除漫长的等待时间并确保项目截止日期的达成,零拷贝克隆加快了数据复制的速度。自从引入了简化、降低成本并改进数据管理和复制的零拷贝克隆以来,项目开发取得了显著的转变。

Snowflake Zero Copy Cloning

零拷贝克隆最令人惊叹的特性是克隆项和原始项是独立运行的。对其中一个进行的任何修改都不会影响另一个。在进行修改之前,它们共享相同的存储。只要克隆的对象保持不变,这种独立性在无需额外费用进行备份时尤其有用。

快照捕获: 在克隆过程中,会捕获原始对象的快照并应用于克隆项。它为您提供了对底层存储的引用,除非您进行更改,否则该存储不会改变。

效率和速度: 与其他数据库相比,Snowflake 的克隆速度明显更快。环境配置不再需要等待一整天或更长时间。克隆可以在几分钟内完成,具体取决于原始项的大小。

分区更改: 即使原始项和克隆项最初共享相同的存储,任何更改都会导致不同的微分区更改。存储计算可能会因此变得复杂,但 Snowflake 会控制这个过程,确保对源或克隆的修改可以单独进行,而不会相互影响。

Snowflake Zero Copy Cloning

持续数据保护 (CDP): 持续数据保护 (CDP) 保护这些修改,确保数据的安全性和完整性。尽管零拷贝克隆允许对原始对象和复制对象进行独立修改,但对克隆快照进行的任何更改都会导致生成额外的存储组件。

这些额外的存储组件可能会导致更高的费用。换句话说,修改复制的快照可能导致对存储需求的增加,从而可能导致额外的成本。

克隆以及 Snowflake 对象

  • 本节介绍 Snowflake 对象的特殊克隆注意事项。
  • 受管访问模式和克隆
  • 克隆模式并包含 WITH MANAGED ACCESS 子句时所需的权限取决于原始模式是受管的还是非受管的。

对象克隆和参数

  • 有关对象参数的更多信息,请参阅参数。
  • 默认序列和克隆
  • 用于生成默认值的序列可以由表中的列引用。当克隆表被复制时,它会引用源或克隆的序列。
  • 如果包含表和序列的数据库或模式被克隆,则克隆表会引用克隆的序列。
  • 例如,如果源序列定义在不同的数据库或模式中,则克隆表会引用源序列。或者,如果您只克隆表,则克隆表会引用源序列。

外键约束和克隆

表上的外键约束可能引用包含主键的表。如果包含这两个表的数据库或模式被复制,则带有外键的克隆表会引用第二个克隆表中的主键。

聚簇和克隆键

为了将相似的行共置在同一个微分区中,数据库中的列子集可以被指定为聚簇键。当克隆带有聚簇键的表时,会使用该聚簇键来生成新表。默认情况下,自动聚簇对新表是关闭的。

  • Stage 和克隆: 可以克隆单独命名的外部 stage。外部 stage 指的是外部云存储中的一个存储桶或容器;克隆外部 stage 不会影响引用的云存储。无法复制内部(例如 Snowflake)命名的 stage。
  • 复制数据库或模式时: 在克隆过程开始时存在于源中的外部命名的 stage 会被复制。当克隆表时,与之关联的内部 stage 也会被克隆。克隆表 stage 为空,因为原始数据库或模式中的表 stage 中的任何数据文件都不会被迁移。内部命名的 stage 不会被克隆。
Snowflake Zero Copy Cloning
  • Iceberg 元数据: Snowflake 为克隆表创建的 Iceberg 元数据文件与原始表不同。克隆表的快照不包含来自原始表的任何快照数据。

然而,任何引用外部 stage 的 pipe 都会被克隆。具有 INTEGRATION 参数设置的任何 pipe 对象都属于此类。

搜索优化和克隆

启用了搜索优化服务(Search Optimization Service)的表可以被克隆。这将导致相应的搜索访问路径的零拷贝克隆。即使克隆表保持不变,如果克隆的搜索访问路径过时,仍然可能产生维护费用,因为它需要更新以反映克隆表的当前状态。有关克隆和搜索优化的更多详细信息,请参阅克隆表、模式或数据库。

Snowflake Zero Copy Cloning

流和克隆

现在,当克隆数据库或模式(包括源表和流)时,流(在克隆中)中任何未消耗的记录仍然无法访问。这与表的 Time Travel 行为一致。如果表被克隆,克隆的历史数据从克隆创建的时刻开始。

克隆和治理目的

掩码和行访问策略

  • 访问克隆对象时,以下方法有助于保护对具有表或视图 SELECT 权限的用户的敏感数据。
  • 无法克隆单个策略对象。
  • 当模式被克隆时,其所有策略也会被克隆。
  • 映射到克隆表的策略与原始表的策略相同。换句话说,如果策略应用于基表或其列,则克隆表或其列会链接到该策略。

如果原始表引用了不同模式中的策略,则克隆表会保留该外键引用。

标签: 克隆对象会保留原始对象(例如表)中的标签关联。

Snowflake Zero Copy Cloning

对于模式或数据库: 此外,还会克隆保存在该数据库或模式中的标签。克隆数据库或模式也会克隆包含在该数据库或模式中的标签。

借助强大的 Snowflake Zero Copy Cloning 功能,您可以创建数据库、模式或表的克隆,而无需复制数据。Snowflake 利用其底层元数据架构和时间旅行能力创建数据的虚拟副本,而不是物理副本。这使您能够在不影响原始数据的情况下操作克隆对象,并降低存储成本。

Snowflake Zero Copy Cloning

零拷贝克隆的重要特性包括即时克隆。无论数据量多少,克隆几乎可以立即生成。

  • 无额外存储费用: 由于数据没有物理复制,因此存储费用被降至最低。仅存储在克隆创建后对原始或克隆对象所做的修改。
  • 细粒度控制: 您可以根据需要克隆特定的表、模式或整个数据库。
  • 数据驱动克隆和零拷贝克隆的详细过程
    Snowflake 中的数据存储在不可变的微分区中。创建克隆时,Snowflake 不会复制物理微分区;相反,它利用已有的元数据。
    只有当对原始对象或克隆对象进行修改时,才会创建新的微分区来存储这些修改。我们将这种方法称为写时复制 (copy-on-write)。
Snowflake Zero Copy Cloning
  • 逻辑独立性
    原始对象和克隆在逻辑上是独立的实体。例如,克隆表可以包含不同的授权、索引和约束。克隆后,原始对象和克隆对象可能会独立发展。

高级用例

使用实际数据进行测试

使用克隆来使用实际生产数据进行实验或模拟。由于没有复制数据,测试既经济又有效。

  • 灾难恢复
    将克隆纳入您的灾难恢复计划。与时间旅行结合使用时,您可以快速将表或模式恢复到特定状态。
  • 环境复制
    快速复制生产环境以用于 UAT、QA 或暂存。
  • 数据匿名化和掩码
    创建敏感数据集的副本,并对副本进行匿名化或掩码处理,同时保留原始数据。
  • 归档和备份
    将克隆的数据库快照作为归档或备份进行保留。

局限性

  • 在同一账户内
    无法克隆账户。只能在同一 Snowflake 账户内进行克隆。
  • 临时对象
    无法复制临时对象或临时表。
  • 保留期
    克隆对象的保留期与其原始对象的保留期相关。如果原始对象的 Time Travel 期间已用完,克隆就无法访问克隆创建之前的历史数据。
  • 相互依赖的成本
    尽管克隆最初可以节省存储空间,但对克隆或原始对象的重大修改可能会导致新微分区的创建,这会增加存储使用量。

由于只有对原始对象或克隆对象进行的修改才需要额外空间,因此该过程可降低存储成本,并使克隆对象能够完全独立地发展。正是由于这一特性,零拷贝克隆才成为简化流程、提高产出并加强现代分析环境中健全数据策略的有效工具。

结论

总而言之,我们可以得出结论:Snowflake Zero Copy Cloning 是一项具有变革意义的技术,它使用户能够创建自主、即时的非物理复制数据副本,从而实现灵活且经济高效的数据管理。通过利用 Snowflake 的元数据驱动架构,克隆能够支持多种用例,例如测试、灾难恢复、并行分析以及通过时间旅行进行历史数据恢复。


下一主题