おはようございます、祥です。
今回は直近の案件で利用したS3とGCSに対するデータの自動取り込み(Snowpipe)について設定方法や両クラウドストレージ間での設定の違いなどをまとめていきたいと思います。
💡急ぎの方向けの要約はこちら
- S3イベント通知を利用する前提であればS3の方が設定が容易
- GCSは一部設定をCLIで対応する必要があるため、S3と比較すると若干難易度が高め
- PIPE開始前の未取り込みデータはALTER PIPEコマンドのREFRESHオプションで対応しましょう
Amazon S3向けのSnowpipe自動化
- S3バケットへのアクセス許可の設定(AWS操作)
- ポリシー、ロールを作成し、ロールにポリシーを紐づける
- クラウドストレージ統合の作成(Snowflake操作)
- S3向けSnowflakeアカウントのIAM情報を取得(Snowflake操作)
- DESC INTEGRATIONコマンドで
STORAGE_AWS_ROLE_ARNとSTORAGE_AWS_EXTERNAL_IDの値を確認
- DESC INTEGRATIONコマンドで
- 作成したロールに対するアクセス権限付与(AWS操作)
- イベント通知設定 -前半-(Snowflake操作)
- 3つのオプションが準備されているが、今回はS3イベント通知で設定
- 外部ステージを作成
- パイプ作成
- SQSのARN取得
- イベント通知設定 -後半-(AWS操作)
- S3のイベント通知を設定
Google Cloud Storage向けのSnowpipe自動化
- クラウドストレージ統合の作成(Snowflake操作)
- GCS向けSnowflakeアカウントのSA情報を取得(Snowflake操作)
- DESC INTEGRATIONコマンドで
STORAGE_GCP_SERVICE_ACCOUNTの値を確認
- DESC INTEGRATIONコマンドで
- バケットオブジェクトに対する権限付与(Google Cloud操作)
- カスタム IAM ロールの作成
- 取得したSAに対してロールを割当
- Pub/Subの設定(Google Cloud操作)
- 通知統合の作成(Snowflake操作)
- Pub/Sub向けSnowflakeアカウントのSA情報を取得(Snowflake操作)
- DESC INTEGRATIONコマンドで
GCP_PUBSUB_SERVICE_ACCOUNTの値を確認
- DESC INTEGRATIONコマンドで
- Pub/Subに対する権限付与(Google Cloud操作)
- クラウドストレージ統合の作成(Snowflake操作)
- パイプの作成(Snowflake操作)
- 履歴ファイルをロード(Snowflake操作)
- ALTER PIPEコマンドのREFRESHコマンドを利用しパイプ開始前に作成された未取り込みデータを取り込む
履歴ファイルのロード
パイプ開始前に作成されたデータについては、取り込みができないためALTER PIPEコマンドのREFRESHオプションを利用して取り込みをおこないます。
このオプションは、パイプとターゲットテーブルの両方のロード履歴をチェックしてくれるため、未取り込みデータのみを取得することが可能です。
所感
- 手順のステップ数だけ見ると、Amazon S3のほうが手順が少なく、容易に設定が可能。
- Google Cloud Storageは、一部操作をCLIで実施する必要があり、若干難易度が高め。
- PIPE開始前の未取り込みデータは、ALTER PIPEコマンドのREFRESHオプションで取り込みましょう。(運用のことも考えたオプションを追加するSnowflakeステキです。)
参考URL
- Amazon S3用Snowpipeの自動化 | Snowflake Documentation
- Google Cloud Storage用Snowpipeの自動化 | Snowflake Documentation
- Snowpipeの管理 | Snowflake Documentation