ICEBERG_FILESYSTEM_ERROR:无法在非空位置创建表

问题描述 投票:0回答:1

我的要求是每周删除并重新创建一个 ICEBERG 表(环境 AWS Athena 和存储为 S3)

所以我将以下 2 个 SQL 作为脚本运行。

DROP TABLE my_table;

CREATE TABLE my_table WITH (
is_external = false,
location = 's3://my_bucket/my_table',
table_type='iceberg',
vacuum_max_snapshot_age_seconds=3600
write_compression='ZSTD',
format='PARQUET'
)
AS
SELECT * from my_backup_table;

现在的挑战是,如果表变得非常大并且积累了许多小文件,则 DROP SQL 命令永远不会完全清理 S3 位置。因此 CREATE TABLE 脚本失败并显示

ICEBERG_FILESYSTEM_ERROR:无法在非空位置创建表:s3://my_bucket/my_table。在重试之前,您可能需要手动清理位置“s3://my_bucket/Athena_Results/tables/13654f64-6fcb-4879-9e45-bc510be429ae”处的数据。 Athena 不会删除您帐户中的数据。

现在我重新创建表(手动清理 S3 位置后),发现新表中的对象计数大幅减少,然后 DROP/CTAS 脚本工作正常,DROP 清理整个 S3 位置。但几天后,当对象数量增加时,就不会了。

如有任何帮助,我们将不胜感激。

amazon-athena iceberg apache-iceberg
1个回答
0
投票

该问题是由于

DROP
与 Iceberg 会在引擎盖下超时,并且如果积累了太多 s3 对象,底层 s3 位置就会变脏。 对于新创建的表,您不会注意到这种行为,因为 s3 对象并不多。

几个选项:

  • 不要使用 drop,而是使用 Glue api 加上 s3 删除对象。例如选择表的s3位置,通过glue删除表api删除表,最后删除s3位置
  • 您可以考虑使用 dbt,特别是 dbt-athena https://github.com/dbt-athena/dbt-athena,您可以在其中使用更多实用程序,并且上述第一个选项是处理 Iceberg 的本机方法桌子
© www.soinside.com 2019 - 2024. All rights reserved.