SnowflakeでGCSのバケットを外部ステージに設定してみた

SnowflakeでGCSのバケットを外部ステージに設定してみた

Clock Icon2025.02.13

さがらです。

SnowflakeでGCSのバケットを外部ステージに設定してみたので、その内容をまとめてみます。

基本的には下記のドキュメントの内容に沿って進めていきます。

https://docs.snowflake.com/en/user-guide/data-load-gcs-config

Storage Integrationの定義

まず、Snowflake上で下記のクエリを実行してStorage Integrationを作成します。

必要に応じてSTORAGE_BLOCKED_LOCATIONSのオプションも定義した上で実行してください。

CREATE STORAGE INTEGRATION <任意のStorage Integration名>
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/');

連携用のサービスアカウントの取得

先ほど作成したStorage Integrationから、Google Cloudと連携するためのサービスアカウントを取得します。

DESC STORAGE INTEGRATION <作成したStorage Integration名>;

出力された結果のうち、STORAGE_GCP_SERVICE_ACCOUNTの値を確認します。

2025-02-13_07h21_57

Google CloudでカスタムIAMロールを作成

次に、Storage Integrationで確認したサービスアカウントに紐づけるカスタムIAMロールを作成します。

下図は公式ドキュメントからの引用ですが、必要な権限を設定してください。

2025-02-13_07h25_16

下図は実際に私が行った際の例です。上図のData loading and unloadingの権限を付与しています。

2025-02-13_07h28_29

確認したサービスアカウントに対してカスタムIAMロールを付与

SnowflakeのStorage Integrationで確認したサービスアカウントに対して、カスタムIAMロールを付与します。

Google CloudのIAMの画面からアクセスを許可を押し、表示された画面で下図のようにサービスアカウントとカスタムロールを指定して保存を押します。

2025-02-13_07h33_24

外部ステージを作成

これで準備が整ったので、外部ステージを作成していきます。

-- 作成したStorage Integrationを別のロールに権限付与
GRANT USAGE ON INTEGRATION <作成したStorage Integration名> TO ROLE <ACCOUNTADMIN以外のロール>;

-- 外部ステージの作成
USE ROLE <上記のクエリでUSAGEを付与したロール>;

CREATE STAGE <任意のステージ名>
  URL = 'gcs://<bucket>/<path>/'
  STORAGE_INTEGRATION = <作成したStorage Integration名>;

この上で、ステージ上のファイルの情報を取得するクエリを実行してみると、下図のように結果が得られました。

SELECT
    METADATA$FILENAME AS FILE_PATH,
    METADATA$FILE_LAST_MODIFIED AS LAST_MODIFIED
FROM @<作成したステージ名>
ORDER BY METADATA$FILE_LAST_MODIFIED DESC;

2025-02-13_07h48_51

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.