雪花内部如何执行更新?

Man*_*ham 5 cloud sql-update snowflake-cloud-data-platform

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

Mar*_*ski 9

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

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

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

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

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