数据岗位面试题更新 2026-08-05

请说明在 Apache Iceberg 中,如何对表进行 compaction(压缩)操作,包括相关配置和具体执行步骤。

数据系统设计技术原理Apache Iceberg

考察说明

考查对 Iceberg 表维护机制的理解,特别是 compaction 的配置与执行方式。

回答思路

  1. 【回答框架 1】Apache Iceberg 的 compaction 主要用于合并小文件,减少元数据开销和查询开销。Iceberg 提供两种方式:自动压缩(通过 Spark 或 Flink 的 merge-on-read 模式)和手动压缩(通过 rewrite_data_files 存储过程或 Spark 的 remove_orphan_files)。
  2. 【回答框架 2】手动压缩通常使用 Spark 执行:调用 `CALL iceberg_system.rewrite_data_files(table => 'db.tbl')`,可指定选项如 `options => map('min-file-count', '5')` 或 `strategy => 'binpack'` 来控制触发条件和策略。
  3. 【回答框架 3】自动压缩通常依赖数据写入时的合并策略,例如在 Spark 写入时启用 `write.merge.on-read` 或通过 Flink 的 compaction 任务自动触发。但这些行为依赖于具体版本和配置,因此需要查阅对应版本文档。
  4. 【回答框架 4】执行前应评估压缩策略对查询性能的影响,尤其是重写文件可能带来 I/O 和计算开销。压缩后应验证数据完整性,可通过 Iceberg 的元数据信息确认文件数量变化。
  5. 【关键点 1】Iceberg compaction 通过合并小文件提升查询效率。
  6. 【关键点 2】可通过 `rewrite_data_files` 存储过程执行手动压缩。
  7. 【关键点 3】支持 binpack 和 sort 等策略,需根据数据特征选择。
  8. 【关键点 4】自动压缩依赖写入端配置,具体行为需按版本来确认。
  9. 【关键点 5】压缩涉及文件重写,可能增加写放大和成本。
  10. 【易错点 1】不要声称自动压缩是默认行为,这取决于版本和配置。
  11. 【易错点 2】压缩可能影响正在进行的查询性能,应在低峰期执行。
  12. 【易错点 3】不要忽略压缩后的数据校验和元数据清理。