データ基盤
Snowflake Icebergテーブルとは?同じデータを他のエンジンでも読む
シリーズSnowflake 入門全13回
- 第1回Snowflakeとは?仕組み・料金・使い方をわかりやすく解説
- 第2回Snowflakeのウェアハウスとは?サイズとクレジット・自動停止
- 第3回Snowflakeの料金の仕組みとは?計算・保存・転送とコスト管理
- 第4回Snowflake マイクロパーティションとは?プルーニングとクラスタリング
- 第5回Snowflake VARIANTとは?JSONを扱う半構造化データの仕組み
- 第6回Snowflake Time Travel(タイムトラベル)とは?保持期間と復元
- 第7回Snowflake レプリケーションとは?別リージョンに複製して切り替える
- 第8回Snowflake ロールとは?権限をロールに与えて階層で渡す仕組み
- 第9回Snowflake Dynamic Tablesとは?SELECTだけで結果の表を最新に保つ
- 第10回Snowflake データ共有とは?コピーせずに取引先と同じ表を使う
- 第11回Snowflake Icebergテーブルとは?同じデータを他のエンジンでも読む
- 第12回Snowflake Cortexとは?データを外に出さずにSQLでAIを使う
- 第13回Snowflake Well-Architectedとは?5つの柱で自分の判断を見直す
- Iceberg
- Apache Iceberg
- Snowflake
- Iceberg テーブル
- Horizon Catalog
- カタログ
- 外部ボリューム
- Spark
- Parquet
- メタデータ
- スナップショット
- Open Catalog
- Apache Polaris
- Iceberg REST
- オープンテーブルフォーマット
- 囲い込み
- データ基盤
目次
データベースの表は、ふつうそのデータベースの形式で保存される。別のツール(データを処理するエンジン)でも同じデータを使いたいときは、表をファイルに書き出して渡す。渡した後に元の表が変わっても、書き出したファイルは変わらない。
複数のツールから同じ表を読めるよう、表をファイルとして持つ形式を決めたものを、オープンテーブルフォーマットという。Apache Iceberg は、大きな分析用のデータのためのオープンテーブルフォーマットである1。Snowflake では、この形式で持つ表を Iceberg テーブルという2。
Snowflake の Iceberg テーブルとは何か。
Iceberg テーブルは、データを Apache Iceberg の形式で一つだけ持つ Snowflake の表である。Snowflake がカタログを持てば、Spark などほかのエンジンも Horizon Catalog を通して同じデータを読み書きできる。
ふつうの表から書き出した写しは、元の表を変えても変わらない。Iceberg テーブルにはこの食い違いが無い代わりに、使える機能に制限があり、速さにも差がある。Snowflake は、Snowflake だけで使う表はふつうの表に、複数のエンジンで使う表は Iceberg にするよう勧めている。
顧客の表を Spark でも読み、その後に行を消す
※ この節の例は、説明のために作った架空のものです。
Snowflake で行を消したとき、ふつうの表から書き出した写しは消す前のままで、Iceberg テーブルなら Spark も消した後のデータを読む。顧客の表を Snowflake で作り、分析の担当が Spark(広く使われる分析のエンジン)でも同じ表を読む場面を考える。Snowflake の Iceberg テーブルの入門の手順にある、顧客の表 customer_iceberg を使う3。
この手順では、自社の Amazon S3 のバケット(クラウドストレージの入れ物)を、外部ボリューム iceberg_external_volume として Snowflake につなぐ。外部ボリュームは、Snowflake を自社のクラウドストレージにつなぐためのオブジェクトである2。顧客の表を Iceberg テーブルとして作り、Snowflake の見本のデータから顧客を入れる。その後、市場の区分が AUTOMOBILE の顧客を消す3。
DELETE FROM customer_iceberg WHERE c_mktsegment = 'AUTOMOBILE';
+------------------------+
| number of rows deleted |
|------------------------|
| 29752 |
+------------------------+
29752 行が消え、もう一度 AUTOMOBILE の顧客を探すと、0 行になる3。
ふつうの表から写しを渡す: ふつうの Snowflake の表は Snowflake の形式で持つ4。Spark にファイルとして渡すなら、表を書き出す。書き出した写しは、元の表と食い違い、保存も二重になる5。
- Snowflake書き出したファイル1. 顧客の表をファイルに書き出す
- Spark書き出したファイル2. 書き出したファイルを読む
- Snowflake3. AUTOMOBILE の顧客 29752 行を消す
- Spark4. 手元のファイルには、消した 29752 行が入ったまま
Spark の側を合わせるには、書き出しと読み込みをもう一度やる。写しが二つあれば、保存も二つ分かかる。
Iceberg テーブルにする: Snowflake は、表のデータを Parquet(列ごとに持つオープンなファイルの形式)のファイルで、表の状態を Iceberg のメタデータのファイルで、自社のバケットに書く6。Spark は、Snowflake のカタログ Horizon Catalog に表の今の状態を聞き、同じファイルを読む7。
- Snowflake自社のバケット1. 顧客の表を Parquet とメタデータのファイルで書く
- SparkSnowflake2. Horizon Catalog に、顧客の表の今のメタデータを聞く
- SnowflakeSpark3. 今のメタデータの場所を返す
- Spark自社のバケット4. 同じファイルを読む(写しは作らない)
- Snowflake自社のバケット5. 消した後のファイルと、新しい版のメタデータを書く(メタデータは定期的に作る)
- SparkSnowflake6. もう一度、今のメタデータを聞く
- SnowflakeSpark7. 新しい版の場所を返す
- Spark自社のバケット8. 新しい版を読む。AUTOMOBILE の顧客は 0 行
Iceberg では、表の状態をメタデータのファイルで持ち、新しい版のメタデータのファイルを、前のものと入れ替える8。Snowflake は、前の版からの変更をまとめた新しいメタデータのファイルを、定期的に書く9。Spark は、その後にカタログへ問い合わせると、消した後の版を読む。
実体のデータは、自社のクラウドストレージに一つだけである。Snowflake は、Iceberg テーブルを、一つのデータをいろいろなエンジンから使うのに向く表としている10。
Iceberg テーブルとは:ファイルとメタデータで持つ表
Apache Iceberg の仕様は、分散したファイルシステムなどに保存した、ゆっくり変わる大量のファイルを一つの表として扱うための形式を決めている8。
- 表の状態は、メタデータのファイルで持つ。表を変えるたびに、新しいメタデータのファイルができ、まとめて入れ替わる8。
- ある時点の表の状態を、スナップショットという。スナップショットから、その時点の表のデータのファイルをすべてたどれる8。
- 列を足す、消す、名前を変えるといった表の形の変更ができる。同じスナップショットを読めば、同じ結果が返る1。
Snowflake の Iceberg テーブルは、データのファイルに Apache Parquet を使う2。
どこに保存するか:Snowflake か、自社のストレージか
Iceberg テーブルのファイルの保存先は、二つから選ぶ2。
- Snowflake のストレージ: Snowflake がファイルを持って管理し、保存の料金を請求する。永続の表は Fail-safe(保持期間の後の 7 日、Snowflake だけが戻せる期間)で守られる2。Snowflake は、Snowflake が管理する Iceberg テーブルにはこちらを勧めている11。2026 年 6 月に一般提供になり、使えるのは AWS と Azure の商用のリージョンである12。
- 外部ボリューム: 自社のクラウドストレージに置く。データの保護と復旧は自社の責任で、Fail-safe は無く、保存の料金はクラウドの事業者が請求する2。ファイルを自社のクラウドのアカウントに置きたいときに選ぶ。外部のカタログを使う表は、こちらしか使えない13。
どちらの保存先でも、Snowflake はウェアハウスの計算とクラウドサービスの分を請求する2。
誰がカタログを持つか
Iceberg のカタログは、エンジンが Iceberg テーブルを管理し、読み込むための仕組みである。表の名前から、今のメタデータのファイルの場所を引けるようにする2。
- Snowflake がカタログを持つ: Snowflake の機能をほぼすべて使え、読み書きできる。ファイルをまとめ直すような保守も Snowflake が行う2。
- 外部のカタログを使う: AWS Glue などのカタログが表を管理する。Snowflake の機能は限られ、Snowflake は表の保守をしない2。外部のカタログにつなぐオブジェクトを、Snowflake ではカタログ統合(catalog integration)という14。外部のカタログが Iceberg の REST API を持つなら、Snowflake からその表に書き込むこともできる2。REST API は決まった形の要求でカタログとやりとりする仕組みで、REST は Representational State Transfer、API は Application Programming Interface の頭文字である。
外部のカタログで管理している表は、後から Snowflake がカタログを持つ表に変えられる。変えると、保守も Snowflake が行う15。ただし、変えた表に、Horizon Catalog を通してほかのエンジンから書くことはできない2。ふつうの表から Iceberg テーブルを作るには、データを写す(CREATE ICEBERG TABLE … AS SELECT など)3。
Horizon Catalog:ほかのエンジンからの入口
Snowflake の Horizon Catalog は、Snowflake の中と外のデータを扱うカタログで、Apache Iceberg の REST API である Horizon Iceberg REST Catalog API を持つ167。
- Iceberg の REST API に対応したエンジン(Apache Spark など)から、Snowflake が管理する Iceberg テーブル(第 2 版と第 3 版)を読み書きできる。読み取りは 2026 年 2 月に、書き込みは 2026 年 5 月に一般提供になった1718。
- ほかのエンジンからも、Snowflake で使っているユーザー、ロール、ポリシー、認証のまま問い合わせる7。
- Horizon Iceberg REST Catalog API は、すべてのエディションで使える。API の呼び出しは 100 万回あたり 0.5 クレジットで、クラウドサービスとして請求される。この請求は 2026 年後半に始まる予定とされている7。
- マスキングと行のアクセスのポリシーは、Spark 用の Snowflake のコネクターか、Iceberg の Scan Plan API に対応したエンジンから読むときにかかる。ほかの種類のポリシーには対応していない19。Spark 用のコネクターでは、ほかの種類のポリシーを掛けた表に問い合わせるとエラーになる20。マスキングと行のアクセスのポリシーは、Enterprise Edition 以上の機能である21。
Snowflake の設計の指針 Well-Architected Framework には、オープンさと相互運用を扱う Open and Interoperable Lens がある。このレンズは、ほかのエンジンからのアクセスはすべて Horizon Catalog を通し、ストレージへの直接のアクセスを与えないよう勧めている5。
Open Catalog と Apache Polaris: Snowflake Open Catalog は、Iceberg の REST API の上に作ったカタログで、以前は Polaris Catalog という名前だった。2024 年 10 月に一般提供になった2223。Snowflake が作ってオープンソースにした Apache Polaris は、2026 年 2 月に Apache の正式なプロジェクトになった2425。今は、Open Catalog のアカウントを初めて作ることはできず、Snowflake は Horizon Catalog を勧めている265。
失うもの:機能と速さの差
Iceberg テーブルには、ふつうの表に比べた制限がある2。
- 外部ボリュームに置いた表には、Fail-safe が無い。
- 外部のカタログの表では、Snowflake の機能が限られる。
- 書き込みが失敗して取り消されたときに外部のストレージに残る、どの版からも使われないファイル(orphan file)を、Snowflake は消さない。
- Iceberg テーブルは、保存先やカタログによらず、一時表にもハイブリッドテーブルにもできない。
- ほかのエンジンから Horizon Catalog を通して書くときは、表を前のスナップショットへ戻すことも、第 2 版から第 3 版へ上げることもできない。
Parquet の書き方も選ぶ必要がある。COMPATIBLE はほかのエンジンとの互換を、OPTIMIZED は Snowflake の中での速さを優先する27。既定は OPTIMIZED で、表を作った後は変えられない27。表で指定しなければ、スキーマ、データベース、アカウントで決めた値を受け継ぐ27。合わない設定を選ぶと、ほかのエンジンで読めなくなったり、Snowflake で遅くなったりすることがある28。Snowflake の Iceberg テーブルの入門の手順は Parquet の書き方をどこにも指定しないので、アカウントにも値が無ければ、表は既定の OPTIMIZED になる3。Open and Interoperable Lens は、ほかのエンジンが読む表を OPTIMIZED のままにしないよう勧めている5。
Open and Interoperable Lens によると、2026 年 6 月の時点で、Snowflake がカタログを持ち外部ボリュームに置いた Iceberg テーブルは、TPC-DS(TPC(Transaction Processing Performance Council)という業界団体が定めた、データ分析の性能を測る基準。DS は意思決定支援を表す Decision Support)でふつうの表より約 5% 遅いが、同じ速さを目標にしている5。同じレンズは、複数のエンジンで使う具体的な必要がないのに、すべての表を Iceberg にすることを避けるべきこととして挙げている5。
囲い込みへの見方
Snowflake の 2016 年の論文は、表のファイルを Snowflake 自身の列指向の形式で持つと書いた4。2026 年の Snowflake の技術者のブログは、Snowflake は「壁に囲まれた庭」の典型と見られてきたと自ら書き、Polaris をオープンにした狙いを、ベンダーに縛られないカタログを作ることだとしている24。
カーネギーメロン大学の Andy Pavlo は、2024 年の振り返りで、Databricks と Snowflake の競争が裏側でカタログにも広がったと書いた。Iceberg は標準になったが、Polaris の採用がどう進むか、互換が長く保たれるかはまだ分からないとしている29。2025 年の振り返りでは、使われている Parquet のファイルの 94% が 2013 年の第 1 版の機能しか使っていないという、自分たちの分析を挙げ、読み書きのライブラリーごとに仕様の対応が違うことを問題としている30。Pavlo は今、ClickHouse Labs にいる31。
出典31件
-
Apache Iceberg「Introduction - Apache Iceberg™」Apache Iceberg Documentation(1.12.0)、日付なし、2026年10月30日取得. https://iceberg.apache.org/docs/latest/ ↩ ↩2
-
Snowflake「Apache Iceberg™ tables | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg — 保存先、カタログ、制限。日本語版は Snowflake の保存の料金がかからないという以前の説明のまま。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13
-
Snowflake「Tutorial: Create your first Apache Iceberg™ table | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tutorials/create-your-first-iceberg-table — 顧客の表と、29752 行を消す例。 ↩ ↩2 ↩3 ↩4 ↩5
-
Benoit Dageville ほか「The Snowflake Elastic Data Warehouse」SIGMOD 2016、2016年6月. https://info.snowflake.net/rs/252-RFO-227/images/Snowflake_SIGMOD.pdf — 3.1 節、表のファイルの形式。 ↩ ↩2
-
Snowflake「Open and Interoperable Lens」Snowflake Well-Architected Framework、2026年6月1日更新、2026年10月30日取得. https://www.snowflake.com/en/developers/guides/interoperable/ ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Scott Teal ほか「Getting Started with Iceberg Tables」Snowflake for Developers、2025年12月20日更新、2026年10月30日取得. https://www.snowflake.com/en/developers/guides/getting-started-iceberg-tables/ ↩
-
Snowflake「Access Apache Iceberg™ tables with an external engine through Snowflake Horizon Catalog | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-access-using-external-query-engine-snowflake-horizon ↩ ↩2 ↩3 ↩4
-
Apache Iceberg「Spec - Apache Iceberg™」日付なし、2026年10月30日取得. https://iceberg.apache.org/spec/ ↩ ↩2 ↩3 ↩4
-
Snowflake「Metadata and retention for Apache Iceberg™ tables | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-metadata ↩
-
Snowflake「June 10, 2024 — Apache Iceberg™ tables — General Availability | Snowflake Documentation」2024年6月10日、2026年10月30日取得. https://docs.snowflake.com/en/release-notes/2024/other/2024-06-10-iceberg-tables ↩
-
Snowflake「Snowflake storage for Apache Iceberg™ tables | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-internal-storage ↩
-
Snowflake「Jun 1, 2026: Snowflake storage for Apache Iceberg™ tables (General availability) | Snowflake Documentation」2026年6月1日、2026年10月30日取得. https://docs.snowflake.com/en/release-notes/2026/other/2026-06-01-iceberg-snowflake-storage-ga ↩
-
Snowflake「Storage for Apache Iceberg™ tables | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-storage ↩
-
Snowflake「Configure a catalog integration | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-configure-catalog-integration ↩
-
Snowflake「Convert an Apache Iceberg™ table to use Snowflake as the catalog | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-conversion ↩
-
Snowflake「Snowflake Horizon Catalog | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/snowflake-horizon ↩
-
「Feb 06, 2026: External query engine support for Apache Iceberg™ tables with Snowflake Horizon Catalog (General availability) | Snowflake Documentation」. https://docs.snowflake.com/en/release-notes/2026/other/2026-02-06-tables-iceberg-query-using-external-query-engine-snowflake-horizon-ga ↩
-
Snowflake「May 26, 2026: Apache Iceberg™ tables: Write support by using an external query engine (General availability) | Snowflake Documentation」2026年5月26日. https://docs.snowflake.com/en/release-notes/2026/other/2026-05-26-tables-iceberg-query-using-external-query-engine-snowflake-horizon-writes-ga ↩
-
Snowflake「Enforce data protection policies on Apache Iceberg™ tables from external query engines | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-query-using-external-query-engine-snowflake-horizon-enforce-access-policies ↩
-
Snowflake「Enforce data protection policies when querying Apache Iceberg™ tables from Apache Spark™ | Snowflake Documentation」日付なし、2026年10月31日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-enforce-access-policies-spark-connector ↩
-
Snowflake「Snowflake editions | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/intro-editions ↩
-
Snowflake「Snowflake Open Catalog release notes | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/opencatalog/release-notes ↩
-
Snowflake「October 18, 2024 —Apache Iceberg™ tables: Support for Snowflake Open Catalog — General Availability | Snowflake Documentation」2024年10月18日. https://docs.snowflake.com/en/release-notes/2024/other/2024-10-18-snowflake-open-catalog-ga ↩
-
Michael Collado ほか「Apache Polaris Graduates to Top-Level Project」Snowflake Blog、2026年2月19日、2026年10月30日取得(アーカイブ). https://www.snowflake.com/en/blog/apache-polaris-top-level-project/ — 筆者は Snowflake の技術者。 ↩ ↩2
-
Apache Software Foundation「Board Meeting Minutes - Polaris」日付なし、2026年10月30日取得. https://whimsy.apache.org/board/minutes/Polaris.html ↩
-
Snowflake「Snowflake Open Catalog overview | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/opencatalog/overview ↩
-
Snowflake「CREATE ICEBERG TABLE (Snowflake as the Iceberg catalog) | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/sql-reference/sql/create-iceberg-table-snowflake ↩ ↩2 ↩3
-
Snowflake「Best practices | Snowflake Documentation」日付なし、2026年10月30日取得. https://docs.snowflake.com/en/user-guide/tables-iceberg-best-practices ↩
-
Andy Pavlo「Databases in 2024: A Year in Review // Blog // Andy Pavlo - Carnegie Mellon University」2025年1月1日、2026年10月30日取得. https://www.cs.cmu.edu/~pavlo/blog/2025/01/2024-databases-retrospective.html — 筆者はカーネギーメロン大学の准教授。 ↩
-
Andy Pavlo「Databases in 2025: A Year in Review // Blog // Andy Pavlo - Carnegie Mellon University」2026年1月4日、2026年10月30日取得. https://www.cs.cmu.edu/~pavlo/blog/2026/01/2025-databases-retrospective.html ↩
-
Andy Pavlo「Andy Pavlo - Carnegie Mellon University」日付なし、2026年10月30日取得. https://www.cs.cmu.edu/~pavlo/ ↩
この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。