■ はじめに
Snowflakeのストレージ統合(Storage Integration)について 予習をする
目次
【1】ストレージ統合(Storage Integration) 【2】利点 【3】基本操作 1)ストレージ統合作成 - CREATE STORAGE INTEGRATION - 2)ストレージ統合確認 - DESC INTEGRATION - 3)ストレージ統合の一覧表示 - SHOW INTEGRATIONS - 4)使用例 【4】権限操作 1)権限付与 2)権限確認 【5】その他の操作 1)ストレージ統合の変更 【6】アクセスエラーについて
【1】ストレージ統合(Storage Integration)
https://docs.snowflake.com/ja/sql-reference/sql/create-storage-integration.html
より抜粋 ~~~~~ 外部クラウドストレージ用に生成されたIDおよび アクセス管理(IAM)エンティティを許可またはブロックされたストレージの場所 (Amazon S3、Google Cloud Storage、またはMicrosoft Azure)の オプションセットとともに格納するSnowflakeオブジェクト ~~~~~ => 分かりづれ、、、 => クラウドストレージ(S3/Google Cloud Storage/Microsoft Azure)と Snowflakeとを接続するためのオブジェクト => クラウドストレージにアクセスする際には、 この「ストレージ統合」を経由して、接続する
【2】利点
1)ステージの作成時/データのロードまたはアンロード時に 認証情報の提供を回避できる => データのロードまたはアンロードについては、 以下の関連記事を参照のこと
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ データ アンロード ~
https://dk521123.hatenablog.com/entry/2022/07/04/172738
【3】基本操作
* 詳細な手順は、以下の関連記事を参照のこと
Snowflake ~ ストレージ統合の作成手順 ~
https://dk521123.hatenablog.com/entry/2023/07/27/000000
1)ストレージ統合作成 - CREATE STORAGE INTEGRATION -
https://docs.snowflake.com/ja/sql-reference/sql/create-storage-integration.html
-- AWS/S3の場合 CREATE STORAGE INTEGRATION 【ストレージ統合名 (e.g. demo_integration)】 TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = S3 ENABLED = TRUE STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::【S3のAWSアカウントID】:role/【ロール名】' STORAGE_ALLOWED_LOCATIONS = ('s3://【S3のバケット名】/【パス】/') ;
STORAGE_AWS_ROLE_ARN
* S3バケットに対する権限を付与するIAMロールのARN
STORAGE_ALLOWED_LOCATIONS
* ストレージの場所(S3バケットなど。複数指定可能)
2)ストレージ統合確認 - DESC INTEGRATION -
https://docs.snowflake.com/ja/sql-reference/sql/desc-integration.html
DESC INTEGRATION 【ストレージ統合名 (e.g. demo_integration)】;
補足
* アクセス制限がどのようにされているかが確認できる
# | PROPERTY | Value例 | メモ |
---|---|---|---|
1 | ENABLED | true | 有効・無効 |
2 | STORAGE_PROOVIDER | s3 | ストレージ種類 |
3 | STORAGE_ALLOWED_LOCATIONS | s3://your-bucket | 許可しているパス |
4 | STORAGE_VLOCKED_LOCATIONS | ブロックしているパス | |
5 | STORAGE_AWS_IAM_USER_ARN | arn:aws:iam::xxxx:user/xxxx | Snowflakeアカウント用に作成された AWS IAM ユーザ |
6 | STORAGE_AWS_ROLE_ARN | arn:aws:iam::xxxxx:role/myrole | S3バケットに対する権限を付与するIAMロールのARN |
7 | STORAGE_AWS_EXTERNAL_ID | MYACCOUNT_SFCRole=xxx/xxxx | 信頼関係を確立するために必要な外部 ID |
https://docs.snowflake.com/ja/user-guide/data-load-s3-config-storage-integration.html
3)ストレージ統合の一覧表示 - SHOW INTEGRATIONS -
https://docs.snowflake.com/ja/sql-reference/sql/show-integrations.html
SHOW INTEGRATIONS; SHOW INTEGRATIONS LIKE '【絞り込みたいパターン】' ; -- SHOW INTEGRATIONS LIKE 'demo%'
4)使用例
USE DATABASE test_db; USE SCHEMA test_schema; CREATE TEMPORARY STAGE IF NOT EXISTS test_stage URL = 's3://your-s3-bucket-name/' FILE_FORMAT = (TYPE = CSV) STORAGE_INTEGRATION = demo_integration -- ★注目★ ; SELECT $1:user_id, $1:user_name FROM @test_stage;
【4】権限操作
1)権限付与
-- 使用権限付与 GRANT USAGE ON INTEGRATION <your_integration_name> TO ROLE <your_role>; -- 所有権付与 GRANT OWNERSHIP ON INTEGRATION <your_integration_name> TO ROLE <your_owner_role> COPY CURRENT GRANTS;
https://docs.snowflake.com/ja/sql-reference/sql/grant-privilege.html
https://docs.snowflake.com/ja/sql-reference/sql/grant-ownership.html
2)権限確認
SHOW GRANTS ON INTEGRATION <your_integration_name>;
https://docs.snowflake.com/en/sql-reference/sql/show-grants
【5】その他の操作
1)ストレージ統合の変更
例1:ストレージ統合を有効にする
-- alter storage integration <your_integ> set <item> = <value>; alter storage integration myint set enabled = true;
https://docs.snowflake.com/ja/sql-reference/sql/alter-storage-integration.html
例2:アクセスできるS3バケットを複数にする
ALTER STORAGE INTEGRATION your_integ SET -- ( ) で 配列を表現 STORAGE_ALLOWED_LOCATIONS = ('s3://your-bucket-name1/', 's3://your-bucket-name2/');
例3:コメント追加
ALTER STORAGE INTEGRATION your_integ SET COMMENT = "This is for sample...";
【6】アクセスエラーについて
* 以下の関連記事を参照のこと
エラー「Failure using stage area. ... AccessDenied」時の対応
https://dk521123.hatenablog.com/entry/2022/10/27/195547
参考文献
https://dev.classmethod.jp/articles/snowflake-s3-integration-by-cfn/
https://blog.serverworks.co.jp/snowflake-import-from-s3
https://dmscube.com/view/post/0/38558
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / ステージ ~
https://dk521123.hatenablog.com/entry/2022/09/01/220643
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ ストレージ統合の作成手順 ~
https://dk521123.hatenablog.com/entry/2023/07/27/000000
Snowflake ~ Snowpipe ~
https://dk521123.hatenablog.com/entry/2023/04/15/225515
Snowflake ~ データ アンロード ~
https://dk521123.hatenablog.com/entry/2022/07/04/172738
Snowflake ~ テストデータ作成 / generator ~
https://dk521123.hatenablog.com/entry/2022/06/20/095659
Snowflake ~ Partition構成のデータを取り込む ~
https://dk521123.hatenablog.com/entry/2022/10/28/000925
エラー「Failure using stage area. ... AccessDenied」時の対応
https://dk521123.hatenablog.com/entry/2022/10/27/195547
エラー「Error assuming AWS_ROLE」時の対応
https://dk521123.hatenablog.com/entry/2022/11/25/175912