我的要求是每周删除并重新创建一个 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 位置。但几天后,当对象数量增加时,就不会了。
如有任何帮助,我们将不胜感激。
该问题是由于
DROP
与 Iceberg 会在引擎盖下超时,并且如果积累了太多 s3 对象,底层 s3 位置就会变脏。
对于新创建的表,您不会注意到这种行为,因为 s3 对象并不多。
几个选项: