Upgrade to Pro — share decks privately, control downloads, hide ads and more …

動かして理解する Apache Iceberg v3 の行リネージ

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

動かして理解する Apache Iceberg v3 の行リネージ

OTFSG Osaka Meetup #2 (2026年7月10日) の講演資料 「動かして理解する Apache Iceberg v3 の行リネージ」です。
https://otfsg-tokyo.connpass.com/event/395739/

Avatar for Akira Shimosako

Akira Shimosako

July 10, 2026

More Decks by Akira Shimosako

Other Decks in Technology

Transcript

  1. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. © 2026, Amazon Web Services, Inc. or its affiliates. All rights reserved. 動かして理解する Apache Iceberg v3 の 行リネージ 下佐粉 昭 (Akira Shimosako) Amazon Web Services Japan 2026.7.10 OTFSG Osaka Meetup #2
  2. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 下佐粉 昭 (Akira Shimosako) アマゾン ウェブ サービス ジャパン プリンシパル アナリティクススペシャリスト ソリューションアーキテクト 専門:データレイク、データウェアハウス 書籍:「AWSではじめるデータレイク」等 Podcast : OTF Talk Icebergを含むOTFの話題を扱うPodcast https://www.otftalk.com/ @simosako 2 @otftalk 本日のスピーカー/スタッフの方たちにも出演いただいています! • おくみんさん : Ep 36 • やっさん : Ep 28, 29 他 • 関山さん: Ep 6,7 • 鰺坂さん: Ep 15,16 • 奥田さん: Ep 17,18
  3. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. Apache Iceberg 概要 • Open Table Format (OTF) の 1 つ • 2017 年時点、S3 に 60 PB の Data Lake を 擁する Netflix が開発 • 2018 年、 Apache Software Foundation 寄贈 機能 • 小さい単位での更新の性能向上 • Serializable Isolation (トランザクション) • Time Travel (過去バージョン参照) • Evolution (スキーマ変更等) https://iceberg.apache.org/ 3
  4. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 4 Apache Iceberg はテーブルフォーマット 「Apache Iceberg」という独立したソフトウェアが存在するわけではない • 「Iceberg テーブル仕様」が テーブルの構造と振る舞いを定義 • メタデータ層で、新バージョンや追記を 管理し、カタログでその情報を管理して いる • 各ツールがテーブル仕様に従ってデータ を操作することで、同じテーブルを 共有できる • 仕様をどの範囲で /どのようにサポート するかは各ツールに依存する Iceberg テーブル仕様のイメージ
  5. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 5 • 操作履歴の管理(スナップショット) • いつ、どのファイルがどう追加・削除されたか • テーブル構造(スキーマ) • 例: id (int), name (string), date (date) • データファイルの場所 • 例: s3://my-bucket/table1/data/file1.parquet • パーティション(データがどう分割されているか) • 例: 日付ごと、地域ごと • 統計情報 • 例:各ファイルの最小値・最大値、行数 • より効率的なクエリ実行を可能にする : 分離したメタデータで何を管理しているのか? 補足:厳密には一部のメタデータはデー タと分離したメタデータ側だけでなく、 データ側に含まれる部分もあります
  6. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 6 例)巨大表へ小さいデータの挿入 メタデータを活用した高度な操作(概要) メタデータ層 データ層 クエリエンジン /data/file1 Table File path employee /data/file1 ①employee表はどこ? ②/data/file1 ③データ取得 クエリエンジン /data/file1 Table File path employee /data/file1 /data/file2 ② ③データ追加 ① /data/file2 ※補足:これは Marge-On-Read の例ですが、Copy-On-Write書き 込みも実装によっては可能です
  7. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 7 Apache Icebergのメタデータ構成 Catalog はオブジェクト(表)の最新Metadata file をポイント Metadata fileは有効なSnapshot(更新履歴)IDの一覧 を保存 (JSON) Manifest listは各Snapshotに含まれるManifest fileの 一覧(Avro) Manifest fileはData fileの位置や、統計情報(行数、 サイズ、列統計)を保存(Avro) Data Fileは実データを保存(Parquet)
  8. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 8 カタログからメタデータロケーションを得る Glue data catalogからの出力 : Snapshotが まだ無い
  9. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 9 データを挿入するとSnapshotが作成され、 各種メタデータも更新される Glue data catalogからの出力 カタログのメタデータロケーションが更新された (00001-…metadata.json) 今後クエリエンジンはこのMetadataを読む
  10. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 10 Metadata/以下にファイルが追加されているが、 以前のファイルも残っている metadata/以下に新しいMetadata(00001-*metadata.json)と、 Manifest list (snap-*.avro)と、Manifest file (0975…avro)が作成された。 以前のMetadata (00000-*.metadata.json)も残っており、参照可能 実データはdata/以下にParquetフォーマットで作成された
  11. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 11 新しいMetadata(*.metadata.json) はManifest listを指す Manifest list (snap-*.avro)はManifest file一覧を指す Manifest file は実データを指す Manifest list (snap-…avro) Manifest file (xxxx-xxx-.avro) 実データの位置とフォーマット
  12. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 12 作成されたParquetファイル $ parquet-cli head *.parquet {emp_id": 1, "name": "Matt Wood", "hire_date": 16509, "job": "Manager"} {"emp_id": 2, "name": "Sarah Johnson", "hire_date": 17734, "job": "Staff"} : {emp_id": 5, "name": "Michael Brown", "hire_date": 17056, "job": "Staff"} $ parquet-cli meta *.parquet (:中略) Row group 0: count: 5 62.20 B records start: 4 total(compressed): 311 B total(uncompressed):246 B -------------------------------------------------------------------------------- type encodings count avg size nulls min / max emp_id INT32 Z _ 5 11.20 B 0 "1" / "5" name BINARY Z _ 5 22.80 B 0 "David Chen" / "Sarah Johnson" hire_date INT32 Z _ 5 11.20 B 0 "2012-11-08" / "2020-01-30" job BINARY Z _ R 5 17.00 B 0 "Manager" / "Staff" data/以下のparquetファイル に実データが入っている Min/Maxや行数等、クエリ最適化に利 用される情報はparquet内に含まれる
  13. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 13 Iceberg Table Spec (V3) Version 3: Extended Types and Capabilities • Version 3 of the Iceberg spec extends data types and existing metadata structures to add new capabilities: • New data types: nanosecond timestamp(tz), unknown, variant, geometry, geography • Default value support for columns • Multi-argument transforms for partitioning and sorting • Row Lineage tracking • Binary deletion vectors • Table encryption keys https://iceberg.apache.org/spec/ より
  14. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 14 Iceberg v3 の行リネージ (Row lineage) 「この行はいつ更新されたか」 をトラッキングする機能 Iceberg の仕様そのものに『行ID + 最終更新情報』を組み込むことで、どのエ ンジンでも同じ土台・軽量に増分検知処理を実現可能に 2つのシステム列が追加 _row_id _last_updated_sequence_number WHERE _last_updated_sequence_number > N で「シーケンス N の後に更新さ れた行」を抽出
  15. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. 15 V3 row lineage と changelog_view V3 Row Lineage Changelog_view (Spark) 機能 システム列に最後に更新したシーケ ンス番号が付与される SQLイベント(INSERT/DELETE/UPDATE)と変更差分 を含んだ一定期間のイベントの記録を提供する 使い方 SELECT … WHERE _last_update_sequence_number >=n Spark のcreate_changelog_view ()で、一時表とし て作成する 規定・依存 Iceberg V3 Spec Spark実装に依存 DELETEイベント 発見できない _change_type = DELETE で確認可能 コスト 軽量(になるように工夫されている)、 ユーザー操作は不要 Spark procedure実行時に作成のコストが発生する 利用用途 • 追記行の差分取得 • UPSERTされる表から差分を取得 しマテリアライズドビューを作 成 (_row_id単位でMVを更新する) • DELETEやUPDATEといったイベントを含んだ CDC • 監査
  16. © 2026, Amazon Web Services, Inc. or its affiliates. All

    rights reserved. まとめ 17 • Open Table Format はテーブルデータを高速かつ便利に扱う仕組みを備えてお り、従来のデータレイクの課題を解決する • Openであり、高度な機能を複数のツールにまたがって利用できる • Apache Iceberg はOTFの1つ。実データとメタデータを分離し、カタログがメ タデータへの入り口になっている • AWSでIcebergを利用する場合は、S3もしくはS3 Tablesにデータを配置、カタ ログはGlue Data Catalogを利用することで多様なクエリエンジンを利用可能