【Snowflake】ローカルファイルのデータをロードする

Snowflakeには様々なファイルのロード(インポート)方法が用意されています。
今回はその中でも、「ローカルファイルのデータロード方法」をご紹介します。

以下のような方におすすめの方法となります。
 ・Snowflakeにとりあえずデータを入れてみたいという方
 ・AmazonS3などのストレージ環境を用意せず、ローカルPCにあるファイルをロードしたい方
 ・コマンドでのファイルロードの方法がわからないという方

目次

  1. やりたいこと
  2. 事前準備
    • ファイルの準備
    • データロード先の作成
    • 内部ステージの作成
    • SnowSQLのインストール
  3. SnowSQLでのファイルロード
    • Snowflakeログイン
    • ファイルのアップロード
    • ファイルのロード
    • ロードしたデータの確認
  4. WEB インターフェースでのファイルロード
    • Snowflakeログイン
    • ファイルのアップロード
    • ファイルのロード
    • ロードしたデータの確認
  5. まとめ

1. やりたいこと

ローカルPCに用意したデータファイル(CSVファイル)のデータを
Snowflakeのテーブルへ登録(ロード)したい。


Snowflakeへファイルのデータをロードする場合、Snowflakeとファイルのやりとりをするための保管場所、「ステージ」が必要となります。
ステージには「外部ステージ」と「内部ステージ」がありますが、ローカルPCから直接Snowflakeとファイルのやり取りをするのであれば、「内部ステージ」を使用します。

内部ステージには、
 ・各ユーザーに自動的に割り当てられている「ユーザーステージ」
 ・各テーブルに自動的に割り当てられている「テーブルステージ」
 ・より柔軟性をもって使用できる「名前付きステージ」
が用意されています。

参考)ローカルファイルに対する内部ステージの選択 | Snowflake Documentation

データロードの方法として、
 ・SnowSQLでコマンドを使用してロードする方法
 ・WEBインターフェース上で操作してロードする方法

があります。それぞれやってみます。

※WindowsOSでの操作となるため、他のOSでは多少の操作の違いがあります。

2. 事前準備

ファイルの準備

ロードするデータファイルを用意します。
SnowflakeではCSVやJSON、XMLなどの形式のファイルがサポートされています。

今回用意したのは2ファイルです。
1ファイル目:ヘッダー行無し、ダブルクォーテーションで括られたCSVファイル
2ファイル目:ヘッダー行あり、ダブルクォーテーションで括られたCSVファイル

sales_202309.csv
"000001","2023-09-01","100001","0051","1500"
"000002","2023-09-01","100002","0052","2000"
"000003","2023-09-02","100001","0060","800"
"000004","2023-09-03","100003","1020","3200"

sales_202310.csv
"slip_number","sales_date","sales_code","product_code","amount"
"000005","2023-10-01","100001","0053","1000"
"000006","2023-10-01","100002","0060","800"
"000007","2023-10-02","100001","0061","900"
"000008","2023-10-03","100003","1050","4000"

データロード先の作成

ファイルをロードする前に、ロード先となる
 ・データベース
 ・スキーマ
 ・テーブル

が必要です。Snowflakeにデータをロードする先を作成します。

データベース

WEBインターフェースでログインし、
左側メニューから データ>データベース を開きます。
画面右側、データベースの作成ボタンをクリックし、任意のデータベースを作成します。
今回は「TRAINING_DB」という名前のデータベースを作成しました。

スキーマ

スキーマを用意します。
今回は、データベースを作成時にデフォルトで作成されるスキーマ「PUBLIC」を使用します。

別のスキーマを使用したい場合、
先ほど作成したデータベースを画面中央のメニューからクリックし、
画面右側、スキーマの作成ボタンをクリックし、任意のスキーマを作成します。

テーブル

テーブルを作成します。
テーブルを作成するためには、SQLを実行する必要があります。
今回は用意したファイルに合わせたテーブルにするため、以下のSQLを用意しました。
テーブル名:SALSE

// Create SALES table
CREATE OR REPLACE TABLE SALES (
   slip_number VARCHAR(6) 
  ,sales_date DATE
  ,sales_code VARCHAR(6)
  ,product_code VARCHAR(4)
  ,amount NUMBER
);

左側メニューから ワークシート を開きます。
画面右側、+ボタンをクリックし、作成されたワークシートに上記SQLを貼り付け、実行ボタンをクリックします。
 ※データベースとスキーマは前述の手順で作成したものを指定してください

内部ステージの作成

ローカルファイルをSnowflakeとやりとりするためには内部ステージが必要ですが、
今回はテーブルステージを使用するため、ステージの作成は不要です。

SnowSQLのインストール

今回は「SnowSQL」という、Snowflakeと接続可能なコマンドラインクライアントを使用したデータロードをご紹介します。
この方法でデータロードをする場合は、SnowSQLをインストールしてください。
インストール方法は以下の公式ドキュメントを参照してください。

SnowSQL (CLI クライアント) | Snowflake Documentation

3. SnowSQLでのファイルロード

Snowflakeログイン

コマンドラインを起動し、Snowflakeへログインします。
SnowSQLのログインコマンドを実行しますが、この際にデータベースやスキーマを選択しておくと、この後のコマンドで指定する必要がなくなります。
 ※今回はログイン時に指定し、その後のコマンドで指定しない方法で進めます。

snowsql -a <orgname>-<accountname> -u <username> -d <dbname> -s <schemaname>


参考)SnowSQLを介した接続 | Snowflake Documentation

ファイルのアップロード

準備したファイルを内部ステージ(テーブルステージ)へアップロードします。
SnowSQLで「PUT」コマンドを実行します。
今回は「SALES」テーブルのステージへアップロードするため、内部ステージを「@%SALES」と指定します。

PUT file:///C:/file/sales_202309.csv @%SALES;

ステージ内にアップロードされているファイルを確認したい場合は、「LIST」コマンドを実行します。

LIST @%SALES;

参考)PUT | Snowflake Documentation
   LIST | Snowflake Documentation

ファイルのロード

アップロードしたファイルのデータを、テーブルへロードします。
SnowSQLで「COPY INTO」コマンドを実行します。
SALES」テーブルへ、内部ステージ「@%SALES」に配置されているファイルをロードします。

ファイルのフォーマットによって、パラメータやオプションを設定してください。
今回は「ダブルクォーテーションで括られたCSVファイル」をロードするため、
「FIELD_OPTIONALLY_ENCLOSED_BY」オプションを設定しています。

COPY INTO SALES
FROM @%SALES
FILE_FORMAT = (TYPE = csv FIELD_OPTIONALLY_ENCLOSED_BY='"');

参考)COPY INTO <テーブル> | Snowflake Documentation

ロードしたデータの確認

「SALES」テーブルにロードされたデータを参照します。
SnowSQLで「SELECT」ステートメントを実行します。

SELECT * FROM SALES;

CSVファイルに記入されていたデータが、「SALES」テーブルに登録されていることが確認できました。

参考)SELECT | Snowflake Documentation

4. WEB インターフェースでのファイルロード

Snowflakeログイン

WEBインターフェースでログインし、
左側メニューから データ>データベース を開きます。
メニューから先ほど作成した「SALES」テーブルを開きます。

データロード

「SALES」テーブルを開くと、画面右上に「データをロード」ボタンが表示されます。
ボタンをクリックすると、データロード用のウィザードが表示されます。

用意した2つ目のファイルをドラッグアンドドロップor選択します。

テーブル、スキーマ、テーブルが正しく選択されていることを確認し、「次へ」進みます。


「2ファイル目:ヘッダー行あり、ダブルクォーテーションで括られたCSVファイル」をロードするため、以下の通り選択します。
 ・ファイル形式:CSV
 ・ヘッダー:最初の行をスキップ
 ・オプションで囲まれたフィールド:二重引用符


選択が済んだら「ロード」をクリックします。

正常にロードされた場合、このように表示されます。

ロードしたデータの確認

「SALES」テーブルにロードされたデータを参照します。

左側メニューから ワークシート を開きます。
画面右側、+ボタンをクリックし、作成されたワークシートに下記SQLを貼り付け、実行ボタンをクリックします。

SELECT * FROM SALES;


 ※データベースとスキーマは前述の手順で作成したものを指定してください

2ファイル分のデータ(8レコード)が、「SALES」テーブルに登録されていることが確認できました。

5. まとめ

今回は「ローカルファイルのデータロード方法」をご紹介しました。
SnowSQLを使用する場合は一度内部ステージへファイルをアップロードする必要がありますが、
バッチファイルを作ればある程度は自動化もできそうです。
CSVファイル以外にも、JSONやXML形式のファイルのロードが可能ですので、ぜひ試してみてください。