🔖

Snowflakeでステージ作成からデータの取り込みまで

2022/10/18に公開

仕事でSnowflake案件に携わりそうでSnowPro Coreの取得がてらの勉強アウトプットになります。

参考にしている教材
https://www.udemy.com/course/snowflake-masterclass/

一括ローディング

またの名をバルクローディングと言います。
イメージとしては外部ストレージ(AWSのS3とか)からSnowflake上のテーブルにデータを取り込みます。

データベースの作成

今回はMANAGE_DBというデータベースを作成します。

CREATE OR REPLACE DATABASE MANAGE_DB;

スキーマの作成

MANAGE_DB内にexternal_stagesというスキーマを作成します。

CREATE OR REPLACE SCHEMA MANAGE_DB.external_stages;

外部ステージの作成

※実際のUdemy講義内でS3の資格情報が記載されており、その情報がないと参照できないです。

CREATE OR REPLACE STAGE MANAGE_DB.external_stages.aws_stage
    url='s3://bucketsnowflakes3';

S3のバケットの中身を確認してみる

LIST @aws_stage;

or

LIST @MANAGE_DB.external_stages.aws_stage;


aws_stage内には3つのファイルがあることがわかります。

テーブルの作成

S3のデータをロードするためのテーブルを作成します。

CREATE OR REPLACE TABLE OUR_FIRST_DB.PUBLIC.ORDERS (
    ORDER_ID VARCHAR(30),
    AMOUNT INT,
    PROFIT INT,
    QUANTITY INT,
    CATEGORY VARCHAR(30),
    SUBCATEGORY VARCHAR(30));

COPYコマンドでロードする

コマンド解説
COPY INTO [ロード先のテーブル名]
   FROM @[外部ステージ名]
   file_format = [(ファイルタイプの指定 区切り文字の指定 ヘッダーをスキップ)]
   files = [(S3にあるCSVファイル名の指定)]

COPY INTO OUR_FIRST_DB.PUBLIC.ORDERS
    FROM @MANAGE_DB.external_stages.aws_stage
    file_format= (type = csv field_delimiter=',' skip_header=1)
    files = ('OrderDetails.csv');

COPYコマンド結果の確認

確認項目

  • statusがLOADEDであること
  • rows_parsedとrows_loadedが同じ値であること
  • error_seenが0であること

SELECT文での確認

SELECT * FROM OUR_FIRST_DB.PUBLIC.ORDERS;

補足

COPYコマンドのオプションのfilesで正規表現でファイル指定することも可能

COPY INTO OUR_FIRST_DB.PUBLIC.ORDERS
    FROM @MANAGE_DB.external_stages.aws_stage
    file_format= (type = csv field_delimiter=',' skip_header=1)
    pattern='.*Order.*';

以上で外部ステージからのデータロードは完了です。

Discussion