Slide 1

Slide 1 text

Apache Iceberg: The Definitive Guide 輪読会 Chapter 10. Apache Iceberg in Production 前半 2024/10/7 Ryuji Doi @diosql 1

Slide 2

Slide 2 text

はじめに ■ 本資料は「Apache Iceberg: The Definitive Guide」の Chapter 10. を意訳・要約したものです ■ 発表の内容は個人の見解に基づくものであり、 所属企業を代表するものではありません 2 Chapter 10. Apache Iceberg in Production

Slide 3

Slide 3 text

自己紹介 Ryuji Doi(@diosql) SIer 企業でデータエンジニアをしています。 ■ Snowflake を中心に Azure のデータ基盤の提案・導入をメインで担当(計1年弱) ■ 元は Linux/Hadoop インフラエンジニア(約8年) ■ Apache Iceberg は初学者 輪読会の意気込み: 皆さんと楽しく学んでいきたいと思います。よろしくお願いします! 3 Chapter 10. Lifecycle of Write and Read Queries

Slide 4

Slide 4 text

■ 9章までで Spark, Dremio, Flink などの各種処理エンジンにおける Iceberg テーブルの 操作をハンズオン形式で学んだ ■ 10章では、運用環境における Apache Iceberg の監視と保守に役立つテクニックを 学んでいく ■ 具体的には以下3点が本章のメイントピックとなる 1. Apache Iceberg Metadata Tables 2. Isolation of Changes with Branches 3. Rolling Back Changes Chapter 10. Apache Iceberg in Production の内容 4 Chapter 10. Apache Iceberg in Production 本資料にて扱うのはここ!

Slide 5

Slide 5 text

■ 10章で説明される手法は、データパイプライン管理の実運用における、 予防的アプローチ/反応的アプローチの両方に適用することができる Chapter 10. Apache Iceberg in Production の内容 5 Chapter 10. Apache Iceberg in Production 予防的アプローチ 反応的アプローチ • メタデータテーブルを用いた パーティションサイズの監視 • ブランチを使用した不良デー タ取り込みの防止 • 大きくなりすぎたパーティ ションのリライト • 不良データ取り込み後のテー ブルのロールバック 事前に対処することで問題の 発生を予防するアプローチ 問題が発生した際に事後的に 対処するアプローチ Iceberg 運用における例 Iceberg 運用における例

Slide 6

Slide 6 text

⚫ クエリ実行環境 書籍内のサンプルクエリで使用されるクエリエンジンは以下の通り。 – Spark SQL – Dremio – Trino 本資料では以下の Tabular 社の Image を使用し、Spark SQL の実行環境を構築して クエリの実行確認を行った。 エコシステム 実行環境/サービス クエリエンジン Spark SQL ストレージ Minio (Amazon S3) カタログ JDBC Catalog (sqlite) 前提条件 6 Chapter 10. Apache Iceberg in Production GitHub - tabular-io/docker-spark-iceberg

Slide 7

Slide 7 text

◼ Apache Iceberg にはテーブルの健全性の監視や最適化可能箇所の特定ための、 SQL を用いてアクセス可能な複数のメタデータテーブルが用意されている ◼ 若干の構文の違いはあるものの、どのクエリエンジンにおいても SELECT 句を用いて 参照が可能なため、慣れ親しんだインターフェースでの運用管理が可能 ◼ Hive などの旧来のテーブルフォーマットにおいて、このような運用・監視のための テーブルメタデータの表示は、処理エンジン側の固有実装のコマンドに依存していた – SHOW PARTITION など Apache Iceberg Metadata Tables 7 Chapter 10. Apache Iceberg in Production

Slide 8

Slide 8 text

⚫ メタデータテーブルの一覧 Apache Iceberg Metadata Tables 8 Chapter 10. Apache Iceberg in Production • History • Metadata Log Entries • Entries • Files • Manifests • Partitions • Positional Delete Files https://iceberg.apache.org/docs/latest/spark-queries/#inspecting-tables • All Data Files • All Delete Files • All Entries • All Manifests • References

Slide 9

Slide 9 text

おさらい 9 Chapter 10. Apache Iceberg in Production メタデータの階層構造 • Catalog ➢ Iceberg テーブルの最新断面の Metadata File のロケーションをポイントするシステム • Metadata File ➢ Iceberg テーブルのスキーマ、パーティションス ナップショットなどの変遷を記録したファイル • Manifest List ➢ Iceberg テーブルのある時点でのメタデータの集 合を記録した1つのスナップショットの実体に相 当するファイル • Manifest File ➢ Data layer の各ファイルとそれらのメタデータを 記録したファイル • Data File ➢ Iceberg テーブルを構成する実データ

Slide 10

Slide 10 text

⚫ 概要 ◼ テーブルの変遷を記録するテーブル ◼ テーブル作成後から現在までに作成された スナップショットの作成日時や系譜等の 情報が格納される ⚫ 用途の例 ◼ データの復旧のための特定のスナップ ショットID の特定 ◼ スナップショット同士の関係性、系譜の確認 History 10 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.history; -- Dremio SELECT * FROM TABLE(table_history('catalog.table')) -- Trino SELECT * FROM "table$history" History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 11

Slide 11 text

⚫ 概要 ◼ テーブル更新時に生成された Metadata Fileを 記録するテーブル ◼ テーブルの更新日時、生成されたMetadata File のパス、スキーマ(データ構造)ID と 更新毎のシーケンスの情報が格納される ⚫ 用途の例 ◼ スキーマ変更前の状態にロールバックするため の特定のスキーマに最新のスナップショットの 特定 Metadata Log Entries 11 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.metadata_log_entries; History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 12

Slide 12 text

⚫ 概要 ◼ テーブルの各スナップショットに関する メタデータを保持するテーブル ◼ 各スナップショットに対応する Manifest List の パス、スナップショット生成の契機となった 操作、スナップショットに関する統計情報が 含まれる ⚫ 用途の例 ◼ スナップショットに対応する Manifest List の特定 ◼ テーブルに発生するワークロード傾向の把握による キャパシティ・プランニングの判断 ◼ スナップショットを生成したジョブの特定 Snapshots 12 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.snapshots; History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 13

Slide 13 text

⚫ 概要 ◼ テーブルを構成する Data File の一覧と それらに関する統計情報を保持するテーブル ◼ Data File のパス、形式、パーティションや、 各ファイルのレコード数やファイルサイズ等、 Data File に関する様々な情報が格納される ⚫ 用途の例 ◼ 現在、または過去のスナップショットを 構成する Data File のリストの取得 ◼ 個々の Data File の統計情報の確認 ◼ スナップショットの総サイズの確認 ◼ データ修復が必要なパーティションの特定 Files 13 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.files; -- Dremio SELECT * FROM TABLE(table_files('catalog.table') -- Trino SELECT * FROM "table$files" History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 14

Slide 14 text

⚫ 概要 ◼ テーブルの現在のスナップショット内にある Manifest File の一覧と各 Manifest File 生成時の データの変化に関する情報を保持するテーブル ◼ Manifest File のパス、サイズ、パーティション 仕様や、各 Manifest File 生成時に追加または 削除された Data File の数、パーティションの 統計情報等が格納される ⚫ 用途の例 ◼ 平均サイズを下回る Manifest File の特定による、 rewrite_manifests 実行要否の判断 ◼ スナップショットごとの追加されたファイル数の特定による、 テーブルのファイル増加ペースの確認 ◼ パーティションの上下限値の確認による、 クラスタリング要否の判断 Manifests 14 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.manifests; -- Dremio SELECT * FROM TABLE(table_manifests('catalog.table') -- Trino SELECT * FROM "table$manifests" History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 15

Slide 15 text

⚫ 概要 ◼ テーブル内のパーティション情報の一覧と 各パーティションの詳細情報を保持するテーブル ◼ パーティション値、パーティション仕様、 パーティションに含まれるレコード数および Data File の数等が格納される ⚫ 用途の例 ◼ パーティション内に含まれるファイル数の特定 による、コンパクション要否の判断 ◼ パーティションの合計サイズの特定による、 パーティショニングスキーム変更要否の判断 ◼ 各パーティショニングスキームにおけるパーティション数の特定 Partitions 15 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.partitions; -- Trino SELECT * FROM "test_table$partitions" History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 16

Slide 16 text

⚫ 概要 ◼ テーブル内の全ての有効なスナップショットに 含まれる、削除ファイルを含むデータレイヤーの ファイルの一覧と、各ファイルの詳細情報を 保持するテーブル ◼ Data File /位置削除/均等削除の標識、ファイル パス、形式、ファイル内のレコード数、サイズ、 に加え、当該テーブルの各カラムのサイズや 値の数といったメタデータ情報が格納される ⚫ 用途の例 ◼ スナップショットごとのファイル数、ファイル サイズ、レコード数等の統計情報の確認 ◼ スナップショットごと、パーティションごとの ファイル数、ファイルサイズ、レコード数等の統計情報の確認 All Data Files 16 Chapter 10. Apache Iceberg in Production SELECT * FROM my_catalog.table.all_data_files; History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 17

Slide 17 text

⚫ 概要 ◼ テーブル内の全ての有効なスナップショットに 含まれる Manifest File の情報を保持するテーブル ◼ Manifest File のパス、サイズ、パーティション 仕様、Data File の変更の概要などが含まれる ⚫ 用途の例 ◼ 各スナップショット間での Manifest File 自体の サイズの推移の確認 ◼ テーブルにおける、Manifest File が使用している ストレージ容量の確認 All Manifests 17 Chapter 10. Apache Iceberg in Production SELECT * FROM my_catalog.table.all_manifests; History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 18

Slide 18 text

⚫ 概要 ◼ テーブルに紐づく名前付き参照( = スナップショット = BRANCH, TAG ) のリストを提供するテーブル ◼ 紐づいている名前付き参照の識別子、 参照可能期間、保持する世代数等が格納される ⚫ 用途の例 ◼ スナップショットの履歴と保管ポリシーの管理 ◼ 参照期間が失効するスナップショットの特定 References 18 Chapter 10. Apache Iceberg in Production -- Spark SQL SELECT * FROM my_catalog.table.refs; History Metadata Log Entries Snapshots Files Manifests Partitions All Data Files All Manifests References

Slide 19

Slide 19 text

まとめ ■ 運用環境の Apache Iceberg の監視と保守に役に立つ、主要なメタデータテーブルの概要と その用法を学んだ ■ メタデータテーブルを有効活用することで、Iceberg テーブルの構成管理やクエリパ フォーマンス・データ品質の改善等、実運用で生じる様々な管理作業に必要な情報を 得ることができる ■ メタデータテーブルは使用するクエリエンジンによって実装が異なるため、 使用できるテーブル数や参照する構文にもバラつきがある ■ 本書の範囲を含む10章の包括的な内容と、メタデータテーブル以外の実運用のテクニック の詳細な解説は、以下のけびんさんのブログを参照 Apache Iceberg: The Definitive Guid 10章 Apache Iceberg in Production 19 Chapter 10. Apache Iceberg in Production

Slide 20

Slide 20 text

Appendix ■ その他参考記事 https://iceberg.apache.org/docs/latest/spark-queries/ https://www.apachecon.com/acna2022/slides/02_Ho_Icebergs_Best_Secret.pdf 20 Chapter 10. Apache Iceberg in Production