■本記事の目的
Snowflakeのデータロードを理解する。
ユーザー管理のAmazonS3からSnowflakeにデータロードを行います。
S3バケットとフォルダおよび取込用のテストデータ(CSV形式)は、事前に作成済みとします。
■前回の記事
■概要
外部ステージを作成していきます。
前回、作成したストレージ統合、ファイル形式を利用し作成します。
■外部ステージを作成する。
スキーマオブジェクトのため、作成権を持っているロールで作成します。
作成済みのストレージ統合、ファイル形式を以下の構文に入れてください。
use role <ロール名>;
use database <データベース名>;
use schema <スキーマ名>;
create or replace stage <外部ステージ名>
storage_integration=<ストレージ統合名>
url='<s3バケット/フォルダのURI>'
file_format=<ファイル形式名>
--directory=(enable=true)--ディレクトリテーブル使用する場合は付加する。
例)
use role SYSADMIN;
use database TEST_DB;
use schema TEST_SC;
create or replace stage TEST_STAGE
storage_integration=TEST_INTEG
url='s3://backet_name/folder/csv'
file_format=CSV_HE_CM_NFO_U8
;
S3のURIのフォルダ階層を、ストレージ統合で設定したフォルダの配下階層で、参照制限することが可能です。基本的には、1つのストレージ統合(バケット)から複数の外部ステージを作成し、各配下フォルダの参照を制限することが一般的な利用方法になります。
※運用、監視、セキュリティなどの観点は考慮しましょう。
■参照の確認
Snowflakeからの外部ステージのS3参照の確認方法はいくつかありますが、
代表的なものを紹介します。
LIST文:S3バケット/フォルダ配下のファイルリストを出力できます。
LIST @<外部ステージ>;
外部ステージへのクエリ:外部ステージに対して直接クエリします。
SELECT $1,$2,…,$N -- 区切り列の分だけ調整
FROM @<外部ステージ>;
ディレクトリテーブルへのクエリ:※外部ステージへの有効化設定が必要
SELECT * FROM
DIRECTORY(@<外部ステージ>);
■エラーが出た場合
以下をご確認ください。
〇ユーザー管理のAWS
・ロールに許可しているIAMポリシー
・IAMロールの信頼ポリシー
〇Snowflake
・外部ステージ使用権
・ファイル形式使用権
■あとがき
次回は、実際にテーブルにデータをロードします。
S3とSnowflakeをどの粒度でストレージ統合を構成するかを図式化したほうが良いと考えています。番外編として作成してみます。