数据库 频道

Snowflake 加强对 Apache Iceberg 表的支持

4月8日,Snowflake 今天推出了一系列针对 Apache Iceberg 的增强功能,Apache Iceberg 是其去年添加到数据平台的开放表格式。其中最大的亮点是,Snowflake 客户可以像对待原生的 Snowflake 内部表一样对待 Iceberg 表,从而有效地消除了双层系统。

去年 6 月,Snowflake 推出对 Apache Iceberg 的支持时,该公司将 Iceberg 表作为外部表来支持。这样,Snowflake 客户就能在他们的 Snowflake 环境中查询 Iceberg 数据,但却无法使用原生 Snowflake 数据库表才有的一系列功能。

Snowflake 产品管理副总裁 Chris Child 说,这种情况今天正式改变了。

“我们对待它们(Iceberg表)的方式与对待标准 Snowflake 表的方式完全相同。”Child 说,“如果你正在使用 Apache Iceberg,从你的角度来看,Snowflake 原生表和 Apache Iceberg 表之间没有任何区别。”

Child 补充说,Iceberg 用户现在可以访问与在原生 Snowflake 表中存储数据的客户相同的所有特性和功能。“这适用于读取和写入。”他说,“你可以访问动态表和复制等功能。所有这些都可以在 Iceberg 上运行。”

Child 说,虽然 Snowflake 保留了其本地表格式(与 Iceberg 表相比仍有一些性能上的优势),但 Snowflake 已经摆脱了内部表与外部表的命名方式。“它们实际上都是内部表。”

Child 表示,达到这一点需要大量的开发工作,Snowflake 工程团队正在与 Apache Iceberg 和 Apache Parquet(Iceberg 所依赖的底层数据格式)的开发团队以及 Apache Avro 和 Apache Arrow 团队共享这些工作。

具体来说,Snowflake 现在允许将以前用于本地 Snowflake 表的计算引擎用于 Iceberg 表。Snowflake表示,早期的Snowflake用户还在使用Snowflake搜索优化和查询加速服务,这些服务将很快全面推出。

虽然 Snowflake 在 Iceberg 方面做了大量工作,但仍有许多工作要做。例如,Snowflake正在与 Iceberg 社区合作,在流行的表格格式中推出对 VARIANT 数据类型的支持,Snowflake多年来一直在其专有数据存储中支持 VARIANT 数据类型。

Iceberg开发的另一个领域是支持Iceberg表的数据复制和同步,这对于确保数据在中断情况下的可用性非常重要。这一点目前还在私人预览阶段,很快也会出现在开放的Iceberg规格中。

“我们的本地表中有许多功能是 Apache Iceberg 所不具备的。”Child 说,“这其中有些归结于性能。因此,在某些方面,我们能够以略微不同的方式设计文件和设计我们存储的元数据,[所以]......我们仍然能够从本地表中获得更好的性能。我们认为,Iceberg引擎的性能比其他任何引擎都要好,但本地表仍然要快一些。”

Child 说,使用 Snowflake 的本地表格式写入数据仍然比写入 Iceberg 表更快。考虑到在 Parquet 格式之上的 Iceberg 元数据会带来额外的开销,这样做是有道理的。数据读取方面的差异并没有那么大。

“我们对写入路径等进行了大量优化,”Child 说。“我们在后端实际做的是写入我们的元数据,然后再写入 Iceberg 元数据作为第二步。这非常快。它允许我们以非常快的速度提交写入,但仍允许Iceberg元数据得到充分反映。”

既然摆脱了内部表和外部表的区别,Snowflake 客户必须做出的最大决定就是由谁来管理元数据。他们可以使用Snowflake管理的Apache Polaris(孵化)元数据目录服务,让Snowflake优化环境,这将在性能和安全性方面带来一些好处。另外,Snowflake 客户也可以自己管理元数据,或使用其他元数据目录,如 AWS Glue 或 Dremio 的 Nessie 目录。

Child 表示,Snowflake 正在与 Iceberg 社区合作,将客户在 Snowflake 环境中享有的安全和管理功能引入开放规范。

“Iceberg 目前不支持行级安全或列级屏蔽等功能。而 Snowflake 支持,”他说。“如今,你无法在 Iceberg 上创建与 Snowflake 一样的严格管理、非常精细的控制。还有一点是规范中还不存在的。我们正在与Iceberg团队和Iceberg社区合作,共同研究如何将更多细粒度功能引入Iceberg。”

Child 说,Iceberg中的细粒度访问控制和行列级屏蔽工作还没有时间表。

Child 表示,客户认识到,Snowflake 中的Iceberg功能需要权衡利弊。客户可以使用任何支持的查询引擎(如 Trino、Dremio、Apache Spark 和 Apache Flink)查询他们的 Iceberg 数据,这是一个好处。然而,在使用这些引擎时,他们无法享受与客户使用原生 Snowflake 功能时相同的集成安全性和治理水平。

“如果你想,嘿,我要在Spark、Flink、Trino和Snowflake中运行一些工作负载,可能实现治理、安全和其他一切方面就会有一些复杂性。”他说,“但是,对于我们的许多客户来说,我们看到他们认为这样做是值得的。他们希望能够使用这些不同的引擎,而为创建他们想要的一致环境所做的额外工作是值得的。”

自去年 6 月 Snowflake 首次发布对Iceberg支持以来,Iceberg 的采用率一直在增长。使用 Iceberg 的客户只占少数,但数量增长很快。

0