最佳实践

本主题提供了有关使用 Snowflake 中的 Apache Iceberg™ 表的最佳实践。

为用例创建足够多的外部卷

每个外部卷都与特定 活动存储位置 相关联,单个外部卷可以支持多个 Iceberg 表。但是,所需的外部卷数量取决于您要如何存储、组织和保护表数据。

如果您想将 Snowflake-Iceberg 表的 所有 数据和元数据放在同一存储位置下的子目录中(例如,在同一 S3 桶中),则可以使用单个外部卷。要为 Snowflake 管理的表配置这些目录,请参阅 数据和元数据目录

或者,您可以创建多个外部卷以不同的方式保护不同的存储位置。例如,您可以创建以下外部卷:

  • 外部管理的 Iceberg 表的只读外部卷。

  • 配置为具有 Snowflake 管理的表具有读写权限的外部卷。

经常刷新外部管理的表

为了防止长时间刷新并快速获取最新的表数据,请对使用外部目录的 Iceberg 表执行频繁刷新。

当 Snowflake 预计操作需要很长时间时,它会尝试优化表刷新。但是,刷新时间最终取决于与表关联的快照数量以及属于表的数据文件数量。

也务必使 Snowflake 刷新计划与表维护操作(例如快照到期或压缩)保持一致。每次执行维护操作时都刷新元数据。

有关说明,请参阅 刷新表元数据

写入完整的统计信息

为了优化未由 Snowflake 管理的表的查询运行时性能,请确保 Parquet 文件统计信息尽可能完整。

确保您使用的 Parquet 文件写入器(例如 Spark 或 Trino)已配置为写入统计信息。您可能还需要将写入器更新到最新版本。

缺少以下统计信息会降低查询性能:

  • 最小值和最大值。

  • 非重复值的数量 (NDV)。非重复值的数量用于确定复杂联接中的联接顺序。缺少的 NDV 统计信息可能导致联接爆炸。

  • NULL 计数。

增大仓库规模

当您创建使用外部目录的 Iceberg 表时,Snowflake 会尝试从表清单文件中读取统计信息以提供更快的性能。

在某些情况下,例如当清单文件中缺少或有不正确的统计信息时,Snowflake 会扫描表数据文件来查找统计信息。扫描大量数据文件可能会减慢表的创建速度。为了加速表创建过程,请使用可以并行扫描表文件的更大仓库。

备注

Snowflake 不会并行化表列扫描。切换到更大的仓库并不会加快查询运行时。

为您的用例选择正确的存储序列化策略

选择适合您的用例的 STORAGE_SERIALIZATION_POLICY。当您创建 Snowflake 管理的表(或将表转换为使用 Snowflake 作为目录)时,您会为该表设置存储序列化策略。序列化策略会告知 Snowflake 对表数据文件执行什么类型的编码和压缩。

不合适的策略可能会使表与外部引擎不兼容或导致 Snowflake 的性能下降。

有关更多信息,请参阅 CREATE ICEBERG TABLE(使用 Snowflake 作为 Iceberg 目录)

语言: 中文