AWS Glue Iceberg テーブル v3 スペックの最適化
AWS Glue Iceberg テーブルは 2025.10.28 時点で format-version=2 までサポートしていますが、format-version=3 はサポートしていません。
とはいえ、Iceberg format-version=3 としてデータを保存し利用はできます。
Athena でクエリ実行できない等の問題こそありますが、format-version=3 として利用はでき、テーブル v3 スペックの恩恵 を受けることができます。
AWS Glue テーブルを Iceberg v3 format で管理し、 Databricks 等の SaaS でデータを参照するような運用をしている場合には大きなパフォーマンスの向上が見込めます。
ですが、 AWS Glue テーブルの最適化機能は format-version=3 の場合、エラーとなります。
その為、Glue Job で Spark SQL 等でテーブル最適化を実施する必要があります。
以下実施例です。
Glue Job Python スクリプト例
1 | from pyspark.context import SparkContext |
Glue マネージメント最適化機能と同等の以下を Glue Job Python スクリプトで実施しています。
- Compaction
- Snapshot retention
- Orphan file deletion
Glue Job 設定
Iceberg テーブル v3 スペックを利用するには iceberg-spark の 1.10.0 以上のバージョンである必要があります。
- iceberg-spark-runtime-3.5_2.12-1.10.0.jar を S3 にアップロードします。
- Job parameters に
--extra-jarsでアップロードされたファイルの S3 URI を指定 - Job parameters の Spark Conf の設定に
--conf spark.jars.packages=org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0を追加- Spark Conf の設定をスクリプト中に記載している場合はそちらに追加してください。
- Job parameters
--user-jars-firstをtrueを追加
以上で Glue Job で Iceberg テーブル v3 スペックが利用できます。
最適化されているかの確認
1 | # Rewrite Data Files(コンパクション) |
各最適化実行 Spark SQL の戻り値が DataFrame なので、その中身を表示することでどのファイルが削除されたかなどがわかります。
metadata が保存されている S3 Object から確認してみる
S3 に保存されているテーブルのメタデータ (<table>/metadata/*.metadata.json) から確認できます。
Iceberg は内部で metadata ディレクトリに JSON ファイルを置きます。
1 | metadata/ |
- Iceberg はテーブル操作(INSERT, DELETE, COMPACT など)毎に新しい metadata.json を作成する
- 番号が大きいほど最新
この metadata.json がテーブルのその時々の情報を記載しているのでそちらを参考にすることで最適化されているかがわかります。
Compaction (コンパクション) が実施されているかの確認
以下に metadata.json の例を記載しています。
metadata.json
1 | ... |
sequence-number が大きいほど最新です。
コンパクション後は operation が replace or rewrite となります。
total-data-filesが 20 → 1 となっておりファイル数が削減されているtotal-files-sizeが 29693801 → 28252807 となっており、ほぼ同じdeleted-data-files(削除したデータファイル) が 20removed-files-size(削除したファイルサイズ) が 29693801 で sequence-number=10 の管理ファイルサイズと同じ
以上から総ファイルサイズはほぼ変わらず、以前のデータがまるまる削除され、新たに 1 つのファイルを生成していることがわかります。
問題なくコンパクションできているようです。
※ Databricks では DESCRIBE HISTORY クエリがサポートされており、テーブルへの操作履歴を確認できるのでそちらから確認も可能です。
以上
参考になれば幸いです。
AWS Glue Iceberg テーブル v3 スペックの最適化
https://kenzo0107.github.io/2025/10/27/2025-10-28-aws-glue-iceberg-v3-optimization/
