随着数据积累到 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"
您可以看到,对于相对较小的数据集,需要 3.2 秒才能获取表中的计数。
让我们通过运行以下查询来优化表:
optimize customers_iceberg REWRITE DATA
USING BIN_PACK
一旦查询成功重写数据,我们就可以再次运行查询来检查计数:
select count(*) from "customers_iceberg"
注意到查询性能有所提高。虽然这是一个使用小型数据集的非常简单的示例,但对于更大、更动态的数据集来说,这将是一个更显着的改进。
更多信息参考: https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-data-optimization.html