为什么 Iceberg rewriteDataFiles 不将文件重写为一个文件?

why Iceberg rewriteDataFiles doesn't rewrite the files to one file?

我有一个冰山 table 有 2 个镶木地板文件在 s3 中存储 4 行 我尝试了以下命令:

val tables = new HadoopTables(conf);
val table = tables.load("s3://iceberg-tests-storage/data/db/test5");    
SparkActions.get(spark).rewriteDataFiles(table).option("target-file-size-bytes", "52428800").execute();

但没有任何改变。 我做错了什么?

一些注意事项:

  1. 默认情况下,Iceberg 不会压缩文件,除非每个文件组和每个分区都有最小数量的小文件可供压缩。默认值为 5。
  2. Iceberg 不会跨分区压缩文件,因为一个文件必须映射 1:1 到分区值的元组。
    • 例如:对于由 col1 和 col2 分区的 table,col1=A 和 col2=1 的文件不能与 col1=A 和 col2=4 的文件压缩

在您的情况下,如果将 min-input-files 设置为 2,前提是文件属于同一分区或 table 未分区,则应将文件压缩在一起。