■本記事の目的
Snowflakeのデータロードを理解する。
ユーザー管理のAzureBLOBStorageからSnowflakeにデータロードを行います。
コンテナーおよび取込用のテストデータ(CSV形式)は、事前に作成済みとします。
※階層型名前空間を有効にしないのでコンテナー配下のフォルダはありません。
■前回の記事
Snowflake Azure BLOB Storageデータロード:②ストレージネットワーク構成
■概要
外部ステージを作成していきます。
前回、作成したストレージ統合を利用し作成します。
ファイル形式については、S3データロードの際に行ったものと共通利用のため
以下参照ください。
Snowflake S3データロード:②ファイル形式
COPY INTOによるデータをロードして検証します。
■前提
SnowflakeはAzure(tokyoリージョン)にホストします。トライアル環境です。
ストレージ統合は、前段で作成済みとします。
■外部ステージを作成する。
スキーマオブジェクトのため、作成権を持っているロールで作成します。
作成済みのストレージ統合、ファイル形式を以下の構文に入れてください。
use role <ロール名>;
use database <データベース名>;
use schema <スキーマ名>;
create or replace stage <外部ステージ名>
storage_integration=<ストレージ統合名>
url='<azure://に変換したパスURL/>'
file_format=<ファイル形式名>
--directory=(enable=true)--ディレクトリテーブル使用する場合は付加する。
例)
use role SYSADMIN;
use database TEST_DB;
use schema TEST_SC;
create or replace stage TEST_STAGE_AZ
storage_integration=TEST_INTEG_AZ
url='azure://storage_account.blob.core.windows.net/container/'
file_format=CSV_HE_CM_NFO_U8
;
階層型名前空間が有効ではない場合、コンテナーまでの階層になります。
1つのストレージ統合(コンテナー)から複数の外部ステージを作成することも可能ですが、S3と比較するとそのケースでの用途はあまりなさそうです。
※運用、監視、セキュリティなどの観点は考慮しましょう。
■参照の確認
Snowflakeからの外部ステージのBLOB参照の確認方法はいくつかありますが、
代表的なものを紹介します。
LIST文:ストレージアカウント/コンテナーのファイルリストを出力できます。
LIST @<外部ステージ>;
外部ステージへのクエリ:外部ステージに対して直接クエリします。
SELECT $1,$2,…,$N -- 区切り列の分だけ調整
FROM @<外部ステージ>;
※ファイル形式が適合していれば、列番で参照可能です。
ディレクトリテーブルへのクエリ:※外部ステージへの有効化設定が必要
SELECT * FROM
DIRECTORY(@<外部ステージ>);
■エラーが出た場合
以下をご確認ください。
〇ユーザー管理のAzure
・エンタープライズアプリケーションに割り当てているロール
・Azureストレージのネットワークの設定
〇Snowflake
・外部ステージ使用権
・ファイル形式使用権
■テーブルを作成する。
データをロードするためには、テーブルオブジェクトが必要になります。
ファイルに合わせて、列を定義してください。
USE DATABASE <データベース>;
USE SCHEAMA <スキーマ>;
CREATE TABLE <テーブル>
(
<COLUMN_NAME_1> <DATA_TYPE>,
<COLUMN_NAME_2> <DATA_TYPE>,
・
・
・
<COLUMN_NAME_N> <DATA_TYPE>
)
/*他テーブルオプションなど*/
;
例)
USE DATABASE TEST_DB;
USE SCHEAMA TEST_SC;
CREATE TABLE TEST_TB
(
TARGET_YM VARCHAR(6),
ORG_CD VARCHAR(10),
ORG_NM VARCHAR(200),
AC_CD VARCHAR(10),
AC_NM VARCHAR(200),
BG_AM NUMBER(28,0),
RS_AM NUMBER(28,0),
RG_TS TIMESTAMP_NTZ
)
;
■データをロードする。
COPY INTO文でデータをロードします。
この処理には、ウェアハウスを指定してください。
USE ROLE <ロール名>;
USE WAREHOUSE <ウェアハウス名>;
USE DATABASE <データベース名>;
USE ROLE <スキーマ名>;
COPY INTO <テーブル名>
FROM @<外部ステージ名>
;
例)
USE ROLE SYSADMIN;
USE WAREHOUSE SYSADMIN\XS;
USE DATABASE TEST_DB;
USE ROLE TEST_SC;
COPY INTO TEST_TB
FROM @TEST_STAGE_AZ
;
■ロードの確認
正常にロードされると、ワークシートでは以下のように出力されます。
履歴を確認する場合、以下で確認可能です。
/*14日以内のCOPY INTOによるロードを確認する。*/
SELECT * FROM INFORMATION_SCHEMA.LOAD_HISTORY;
■あとがき
今回はAzureの組み合わせで作成・ロードしていきました。
AWSとのセキュリティのアーキテクチャが異なるため、多少戸惑いもありました。
どちらの方が簡単かというのは、クラウドサービスの習熟度やセキュリティの記述方式の知識によりけりなので、言及はしません。
詳細なセキュリティの調整をされるユースケースの場合、同じクラウドプロバイダでのSnowflakeとクラウドストレージの構成をいただくことをお勧めします。
目次に戻る