Iceberg表优化

随着数据积累到 Iceberg 表中,由于打开文件所需的处理时间增加,查询的效率逐渐降低。如果表包含删除文件,则会产生额外的计算成本(参考time travel一节)。压缩优化了表的结构布局,而不改变表内容。

以下语法显示了如何优化 Iceberg 表的数据布局:

OPTIMIZE table_name REWRITE DATA
  USING BIN_PACK
  [WHERE predicate]

在之前的实验中执行更新/删除并运行新的删除查询后,让我们测试 Iceberg 表的性能。

使用以下查询, 从表中删除不在美国的客户的行:

delete from "customers_iceberg" where country!='United States'

让我们运行一个计数查询来检查性能:

select count(*) from "customers_iceberg"

image-20231202081954006

您可以看到,对于相对较小的数据集,需要 3.2 秒才能获取表中的计数。

让我们通过运行以下查询来优化表:

optimize customers_iceberg REWRITE DATA
  USING BIN_PACK

image-20231202082038884

一旦查询成功重写数据,我们就可以再次运行查询来检查计数:

select count(*) from "customers_iceberg"

image-20231202082113280

注意到查询性能有所提高。虽然这是一个使用小型数据集的非常简单的示例,但对于更大、更动态的数据集来说,这将是一个更显着的改进。

更多信息参考: https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-data-optimization.html