Snowflake Iceberg Tablesとは?外部ストレージで動くオープンテーブル形式を解説

Snowflake Iceberg Tablesとは?外部ストレージで動くオープンテーブル形式を解説のサムネイル Snowflake
この記事をシェアする𝕏B!FacebookLINEPocket

はじめに:Iceberg Tablesって何がうれしいの?

「Snowflakeに大事なデータを取り込むのは便利だけど、データはやっぱり自分のS3に置いておきたい…」そんな声に応えてくれるのが Snowflake Iceberg Tables です。S3やAzure Blob、GCSといった 外部ストレージ に置いたファイルを、Snowflakeから普通のテーブルと同じようにSELECT・INSERT・UPDATEできる、便利な機能です。

この記事では、Iceberg Tablesって結局なんなの?という素朴な疑問から、実際の作り方まで解説していきます。

Snowflake Iceberg Tablesのアーキテクチャ概要図 - 外部ストレージ(S3など)上のParquetファイルとIcebergメタデータをSnowflakeから参照する仕組み

Apache Icebergとは:オープンテーブル形式の正体

Apache Iceberg はもともとNetflixが開発し、現在はApacheで開発が続いているオープンソースの「テーブル形式」です。難しく聞こえますが、ざっくり言うと 「Parquetファイルの集まりに、テーブルらしさを与えるためのメタデータ(目次)の仕組み」 です。

Parquetだけだと「ただのファイルの寄せ集め」ですが、Icebergのメタデータがあるおかげで、スキーマ変更・タイムトラベル・トランザクションといった本物のテーブルらしい挙動が可能になります。しかも形式が公開されているので、Snowflake以外のエンジン(Spark、Trino、DuckDBなど)からも同じデータを読めるのが大きな魅力です。

Snowflakeでの2つの利用パターン

Snowflake Iceberg Tablesには、大きく2つの使い方があります。

① Snowflake管理のIcebergテーブル

Snowflakeがカタログ(メタデータ管理)も書き込みも面倒見てくれるパターンです。通常のテーブルとほぼ同じ感覚で使え、書き込み性能も高いのが特徴。データの実体だけ自分のストレージにあるイメージです。

② 外部カタログ管理のIcebergテーブル

AWS GlueやREST Catalogなど外部のカタログサービスでメタデータを管理し、Snowflakeは読み取り専用で参照するパターンです。複数エンジンでデータを共有したいときに便利です。

Snowflake管理Icebergテーブルと外部カタログ管理Icebergテーブルの比較図

実際に作ってみよう

まずは 外部ボリューム(EXTERNAL VOLUME) を作ります。これは「Snowflakeがこのバケットを読み書きしていいよ」という入口の設定です。

CREATE OR REPLACE EXTERNAL VOLUME my_iceberg_vol
  STORAGE_LOCATIONS = (
    (
      NAME = 'my-s3-loc'
      STORAGE_PROVIDER = 'S3'
      STORAGE_BASE_URL = 's3://my-bucket/iceberg/'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake-iceberg-role'
    )
  );

続いて、Snowflake管理のIcebergテーブルを作ります。

CREATE OR REPLACE ICEBERG TABLE sales_iceberg (
  order_id   NUMBER,
  amount     NUMBER(10,2),
  ordered_at TIMESTAMP_NTZ
)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_iceberg_vol'
  BASE_LOCATION = 'sales/';

INSERT INTO sales_iceberg VALUES (1, 1980.00, CURRENT_TIMESTAMP);
SELECT * FROM sales_iceberg;

このSELECTは、見た目は普通のテーブル参照ですが、実体はS3上のParquet+Icebergメタデータを読みに行っています。普通のSQLでオープン形式のデータを扱える点が、Iceberg Tablesの大きな魅力です。

通常のSnowflakeテーブルとの違い

  • データの置き場所:通常テーブルはSnowflake内部、Icebergは自分のクラウドストレージ
  • 他エンジンからの読み取り:通常テーブルは不可、Icebergは可能
  • 料金:Icebergはストレージ費用が自分のクラウド側にかかるため、コスト体系が変わる
  • 機能制限:Icebergは一部Snowflake機能(Time Travelの挙動など)で制約あり

こんなときに使いたい

「データレイクとしてS3にすでにParquetを蓄積している」「Sparkチームと同じデータを共有したい」「将来エンジンを乗り換えるかもしれないからベンダーロックインを避けたい」といったケースで威力を発揮します。逆に、Snowflakeだけで完結する小〜中規模ワークロードなら通常テーブルで十分なことも多いです。

また、外部ストレージへのアクセス権設定を間違えると Failed to access remote fileエラー が出やすいので、IAMロール設定は丁寧に行いましょう。

まとめ

Snowflake Iceberg Tablesは、自分のクラウドストレージにあるオープン形式のデータを、Snowflakeから普通のテーブルとして扱える機能でした。データの主権を保ちつつ、Snowflakeの強力なクエリエンジンを使えるのは大きなメリットです。まずは小さなテーブルで試して、外部ボリュームの仕組みに慣れてみてください。

参考リンク

関連記事

この記事をシェアする𝕏B!FacebookLINEPocket