LoginSignup
1
0

Snowflake Azure BLOB Storageデータロード:③外部ステージ~データロード

Last updated at Posted at 2024-03-14

目次に戻る

■本記事の目的

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 @<外部ステージ>;

image.png
 
外部ステージへのクエリ:外部ステージに対して直接クエリします。

SELECT $1,$2,…,$N -- 区切り列の分だけ調整
FROM @<外部ステージ>;

※ファイル形式が適合していれば、列番で参照可能です。
image.png
 
ディレクトリテーブルへのクエリ:※外部ステージへの有効化設定が必要

SELECT * FROM 
DIRECTORY(@<外部ステージ>);

image.png

■エラーが出た場合

以下をご確認ください。
〇ユーザー管理の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
;

■ロードの確認

正常にロードされると、ワークシートでは以下のように出力されます。
image.png

 
履歴を確認する場合、以下で確認可能です。

/*14日以内のCOPY INTOによるロードを確認する。*/
SELECT * FROM INFORMATION_SCHEMA.LOAD_HISTORY;

■あとがき

今回はAzureの組み合わせで作成・ロードしていきました。
AWSとのセキュリティのアーキテクチャが異なるため、多少戸惑いもありました。
どちらの方が簡単かというのは、クラウドサービスの習熟度やセキュリティの記述方式の知識によりけりなので、言及はしません。

詳細なセキュリティの調整をされるユースケースの場合、同じクラウドプロバイダでのSnowflakeとクラウドストレージの構成をいただくことをお勧めします。
 
目次に戻る

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0