Snowflake に作成したIcebergテーブルとMicrosoft Fabricを利用し、データの取得から可視化までの一連の流れを紹介します。
今回はその前提として「Apache Icebergとは何か」について解説します。
Apache Icebergとは
Apache Iceberg(以下、Iceberg)はデータレイクに保存される大規模な分析データセット向けに設計されたオープンソースのテーブルフォーマットです。
大量の分析データを扱うために設計されており、HiveやSparkなど複数の処理エンジンから大規模テーブルへのACID*1トランザクション(一貫性のある更新)やスキーマ変更の柔軟性を提供するのが強みです。
IcebergテーブルはデータをParquetなどの列指向フォーマットで保持しつつ、そのメタデータ(スナップショットやスキーマ情報)を管理することで高効率なクエリとデータ整合性を両立しています。近年、Icebergは業界標準のオープンテーブル形式の一つとして注目されており、SnowflakeやMicrosoft FabricもこのIcebergをサポートすることで相互運用性を高めています。
Apache Iceberg - Apache Iceberg™
Apache Icebergの主な特徴
- スキーマの進化
- スキーマの変更が安全に実施でき、列の追加・削除・更新・リネームが可能。
- タイムトラベル
- テーブルの過去のスナップショットを履歴として保持するため、特定の時点に存在したデータに対してクエリの実行が可能。
- 隠れたパーティショニング
- ユーザーがパーティションキーを意識しなくても、最適なクエリ性能を実現し、クエリミスやパフォーマンス低下を防ぐ。
- パーティションレイアウトの進化
- データ量やクエリの傾向に応じて、パーティションの構造を後から変更可能。
- バージョンロールバック
- 問題が発生した場合、以前の安定した状態に簡単に戻すことが可能。
- 様々な計算エンジンとの統合
- Iceberg自体はテーブルフォーマットのため、SnowflakeやApache Spark、Apache impalaなどの分散処理エンジンが同時かつ安全に操作可能。
Apache Icebergの主なアーキテクチャ
Icebergの内部構造はメタデータ管理とスナップショット機能によって大規模データでも効率的に扱えるよう工夫されており、Icebergテーブルは5つの主要コンポーネントで構成されます。

Icebergカタログ (Catalog) | Icebergテーブルやビューを追跡する「台帳」のような役割で、現在有効なメタデータ(最新のテーブルスナップショット情報やスキーマ)へのポインタを管理します。Hive MetastoreやAWS Glue、もしくはIceberg独自のRESTカタログなど、さまざまな実装を利用できます。 |
---|---|
メタデータファイル (Metadata file) | テーブル状態を記録するファイルです。テーブルに変更があるたび新しいメタデータファイルが生成され、現在のスキーマ、パーティション方式、スナップショット一覧などを保持します。これにより変更履歴を管理し、過去状態へのアクセス(タイムトラベル)を可能にします。 |
マニフェストリスト (Manifest list) | 各スナップショットに対応するマニフェスト(明細)ファイルの一覧です。ある時点のスナップショットがどのデータファイルで構成されるかをまとめて把握でき、パーティション統計情報やファイル数なども記録されています。 |
マニフェストファイル (Manifest file) | スナップショットに含まれる具体的なデータファイルのリストとそれぞれのメタ情報(各ファイルの統計量やパーティション情報など)を保持します。Icebergではディレクトリではなくこのリストでファイルを追跡するため、大量のファイルでも効率的に管理できます。 |
データファイル (Data file) | 実際のデータが格納されたファイル群です。Parquet/ORC/Avro形式のファイルで保存され、これらがマニフェストによって仮想的に一つのテーブルとして扱われます。各スナップショットでは、このデータファイル群の集合がテーブルの内容を表現します。 |
終わりに
今回は、Apache icebergとは何かという概要を記載しました。
次回からは、Snowflake 上に Iceberg テーブルを実際に作成する手順を紹介します。
*1:Atomicity:原子性、Consistency:一貫性、Isolation:独立性、Durability:永続性 の頭文字であり、データを安全かつ正確に扱うための4つのルール。