【问题标题】:How snowflake internally performs updates?雪花如何在内部执行更新?
【发布时间】:2018-07-17 03:50:20
【问题描述】:

据我所知,底层文件(列格式)是不可变的。我的问题是,如果文件是不可变的,那么更新是如何执行的。 Snowflake 是否维护同一行的不同版本,并根据 key 返回最新版本?还是将数据插入到幕后的新文件中并删除旧文件?如果时间旅行设置为 90 天,因为 Snowflake 需要维护同一行的不同版本,那么在这些场景中性能如何受到影响(查询当前数据)。但是由于 Snowflake 不尊重键,因此甚至可以检测到不同的版本。任何有关详细内部结构的见解(文档/视频)都将受到赞赏。

【问题讨论】:

    标签: sql-update cloud snowflake-cloud-data-platform


    【解决方案1】:

    这是一个复杂的问题,但一个基本的想法如下(相当简化):

    • 记录存储在 S3 上的不可变微分区中
    • 表是微分区的列表
    • 修改记录时
      • 它的旧微分区被标记为非活动(从那一刻起),
      • 创建了一个新的微分区,其中包含修改后的记录,以及来自该微分区的其他记录。
      • 新的微分区被添加到表的列表中(从那一刻起标记为活动)
    • 一段时间内不删除不活动的微分区,允许时间旅行

    因此,Snowflake 不需要记录键,因为每条记录仅存储在一个在给定时间处于活动状态的文件中。

    执行更新对查询的影响微乎其微,唯一可见的影响可能是需要从 S3 获取文件并缓存在仓库中。

    有关更多信息,我建议您去 Snowflake 论坛并在那里询问。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 2021-04-04
      • 1970-01-01
      • 2021-10-01
      • 2021-07-12
      • 2021-10-05
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多