◾️はじめに
https://dk521123.hatenablog.com/entry/2025/06/18/143804
の続き。 前回は、Apache Icebergについておおよそ把握できたので 今回は、Snowflake内でIcebergを作ってみる => Snowflakeの公式ドキュメントがよくできているので、結構簡単にできる
目次
【0】Snowflake公式ドキュメント 1)使用するSQL 2)前提条件 【1】Step1:ウェアハウスとデータベースを設定する 【2】Step2:外部ボリュームを作成する 1)S3ロケーションへのアクセスを許可するIAMポリシーを作成する 2)Snowflakeで外部ボリュームを作成する 3)バケットオブジェクトにアクセスするためにIAMユーザー権限を付与する 【3】Step3:テーブルを作成する 【4】クリーンアップする
【0】Snowflake公式ドキュメント
* 以下の公式ドキュメントに従って操作してみるのが良さそう => 面倒なのは、IAMロール周りの作成で、後はそんなに難しくなさそう
チュートリアル: 初めてのIcebergテーブルを作成する
https://docs.snowflake.com/ja/user-guide/tutorials/create-your-first-iceberg-table
1)使用するSQL
CREATE EXTERNAL VOLUME / DROP EXTERNAL VOLUME
* Apache Icebergテーブル 用の外部ボリューム を作成 / 削除
https://docs.snowflake.com/ja/sql-reference/sql/create-external-volume
https://docs.snowflake.com/ja/sql-reference/sql/drop-external-volume
CREATE ICEBERG TABLE / DROP ICEBERG TABLE
* Apache Icebergテーブル を作成 / 削除
https://docs.snowflake.com/ja/sql-reference/sql/create-iceberg-table
https://docs.snowflake.com/ja/sql-reference/sql/drop-iceberg-table
2)前提条件
* S3バケットを用意しておくこと
【1】Step1:ウェアハウスとデータベースを設定する
* ウェアハウスに関しては、すでにあれば省略可能 * データベースに関しては、後々(【3】)で、 「ALTER DATABASE iceberg_tutorial_db SET ...」するので できれば専用DBがあったほうがいい
CREATE WAREHOUSE iceberg_tutorial_wh WAREHOUSE_TYPE = STANDARD WAREHOUSE_SIZE = XSMALL; USE WAREHOUSE iceberg_tutorial_wh; CREATE OR REPLACE DATABASE iceberg_tutorial_db; USE DATABASE iceberg_tutorial_db;
【2】Step2:外部ボリュームを作成する
* 公式ドキュメントがわかりやすいので、
1)S3ロケーションへのアクセスを許可するIAMポリシーを作成する
* 以下を参照
2)Snowflakeで外部ボリュームを作成する
-- STORAGE_AWS_ROLE_ARNは、1)で作成したIAMロールのARN CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume STORAGE_LOCATIONS = ( ( NAME = 'my-s3-us-west-2' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://<my_bucket>/' STORAGE_AWS_ROLE_ARN = '<arn:aws:iam::123456789012:role/myrole>' STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id' ) ); -- 以下を実行し、STORAGE_AWS_IAM_USER_ARN プロパティの値を記録 -- 例: "STORAGE_AWS_IAM_USER_ARN": "arn:aws:iam::123456789001:user/abc1-b-self1234" DESC EXTERNAL VOLUME iceberg_external_volume; -- 後述3)の「IAM ロールのポリシードキュメント」で使用する
3)バケットオブジェクトにアクセスするためにIAMユーザー権限を付与する
* 以下を参照
【3】Step3:テーブルを作成する
https://docs.snowflake.com/ja/user-guide/tutorials/create-your-first-iceberg-table#create-a-table
-- [1] Icebergカタログとしてテーブルを作成する CREATE OR REPLACE ICEBERG TABLE customer_iceberg ( c_custkey INTEGER, c_name STRING, c_address STRING, c_nationkey INTEGER, c_phone STRING, c_acctbal INTEGER, c_mktsegment STRING, c_comment STRING ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'iceberg_external_volume' BASE_LOCATION = 'customer_iceberg'; -- 補足:BASE_LOCATION -- Snowflakeがテーブルのデータファイルとメタデータファイルを -- 書き込めるディレクトリへのパス。 -- テーブルの EXTERNAL_VOLUME 位置からの相対パスを指定
https://docs.snowflake.com/ja/sql-reference/sql/create-iceberg-table-snowflake
-- [2] データベースのカタログ統合と外部ボリュームを設定する ALTER DATABASE iceberg_tutorial_db SET CATALOG = 'SNOWFLAKE'; ALTER DATABASE iceberg_tutorial_db SET EXTERNAL_VOLUME = 'iceberg_external_volume'; -- [3] 確認 SHOW PARAMETERS IN DATABASE; -- => [2] で設定した値が確認できる(e.g. CATALOG:SNOWFLAKE)
その後
* あとは、以下を参考に色々触ってみる
https://docs.snowflake.com/ja/user-guide/tutorials/create-your-first-iceberg-table#load-data-and-query-the-tables
https://docs.snowflake.com/ja/user-guide/tutorials/create-your-first-iceberg-table#delete-rows
【4】クリーンアップする
https://docs.snowflake.com/ja/user-guide/tutorials/create-your-first-iceberg-table#clean-up
DROP ICEBERG TABLE customer_iceberg; -- DROP ICEBERG TABLE nation_iceberg; DROP EXTERNAL VOLUME iceberg_external_volume; USE DATABASE <my_other_database>; DROP DATABASE iceberg_tutorial_db; -- WAREHOUSEを作成してたら、、、 USE WAREHOUSE <my_other_warehouse>; DROP WAREHOUSE iceberg_tutorial_wh;
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake x Iceberg 〜 基礎知識編 〜
https://dk521123.hatenablog.com/entry/2025/06/18/143804