【Snowflake】ローカルファイルのデータをロードする
Snowflakeには様々なファイルのロード(インポート)方法が用意されています。
今回はその中でも、「ローカルファイルのデータロード方法」をご紹介します。
以下のような方におすすめの方法となります。
・Snowflakeにとりあえずデータを入れてみたいという方
・AmazonS3などのストレージ環境を用意せず、ローカルPCにあるファイルをロードしたい方
・コマンドでのファイルロードの方法がわからないという方
目次
- やりたいこと
- 事前準備
- ファイルの準備
- データロード先の作成
- 内部ステージの作成
- SnowSQLのインストール
- SnowSQLでのファイルロード
- Snowflakeログイン
- ファイルのアップロード
- ファイルのロード
- ロードしたデータの確認
- WEB インターフェースでのファイルロード
- Snowflakeログイン
- ファイルのアップロード
- ファイルのロード
- ロードしたデータの確認
- まとめ
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形式のファイルのロードが可能ですので、ぜひ試してみてください。