Snowflake にローカルからデータをロードしてみる

AWS運用自動化サービス「Cloud Automator」

CI 部の宮本です。今回はローカルの CSV ファイルを Snowflake にロードしてみたいと思います。
やり方を調べていたところ、公式ドキュメントにぴったりのチュートリアルがあったので、以下を参考に進めてみます。

Snowflake を 20 分で紹介

SnowSQL で Snowflake にログインする

今回のチュートリアルは CLI ツールである SnowSQL を使用します。インストール方法は以下の記事を参考にしてください。

SnowSQL コマンドで Snowflake に接続する

以下コマンドでログインします。

<account_name><user_name> はご自身のものに置き換えてくださいね。

因みに<account_name>XXXXXXX.ap-northeast-1.aws のような形式のものです。(AWS の東京リージョンで Snowflake を構築した場合)

データベース、テーブルの作成

CSV をロードする為のデータベース、テーブルを作成します。チュートリアルでは仮想ウェアハウスも作成していますが、初期で用意されているCOMPUTE_WHでも事足りそうなのでスキップします。

参考) CREATE <オブジェクト>

データファイルをステージングする

Snowflake にデータをロードするには、ローカルから直接ロードするのではなく、ステージと呼ばれる領域にファイルをアップロードし、その後テーブルへのコピーを実施する必要があります。

ステージには内部(Snowflake)ステージ外部(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)ステージ があり、今回は内部ステージを使用します。

こちら にロード用のデータがあるので、ダウンロードして任意のディレクトリに解凍しておきましょう。私は /tmp 配下に配置しました。

 

PUT を使用して内部ステージへのアップロードを行います。

一つ目の引数はfile://<アップロードするファイル>@<データベース名>.<スキーマ名>.%<テーブル名> の形式です。スキーマは事前の手順で作成していませんので、自動で作成されるpublicを使用しています。

参考) PUT

因みに内部ステージにはいくつか種類があるようで、今回はテーブルステージを使用しています。詳細は以下を参照して下さい。

参考) ローカルファイルのステージの選択

内部ステージにアップロードしたファイルをテーブルにコピーする

準備が整ったので copy を使用してファイルをテーブルにロードします。

  • from: 内部ステージ名を指定します。@%emp_basic と指定されていますが、プロンプトの表示(miyamoto#COMPUTE_WH@SF_TUTS.PUBLIC)の通り、現在使用しているデータベース(sf_tuts)、スキーマ(public)が使用されます。省略せずに書くと @sf_tuts.public.%emp_basic (@<データベース名.<スキーマ名>.%<テーブル名> ) です。
  • file_format: ロードするファイルの形式を指定します。今回の場合は CSV ファイルで項目は"で囲まれていることを指定しています。
  • pattern: ロード対象のファイルを正規表現で指定できます。
  • on_error: ロード中にエラーが発生した場合に後続のファイルを処理するかどうか指定します。今回はskip_file(エラー対象のファイルをスキップして後続のファイルのインポートは続ける)と指定しています。

参考) COPY INTO

ロード内容の確認

ロード出来ていますね!

まとめ

SnowSQL を使って CSV ファイルのロードを試してみました。ファイルを一度ステージにアップロードしてからコピーする必要があり、一手間多い感想をいだきましたが、アップロード時には自動でファイルを圧縮してくれますし、DWH で扱うデータ量を考えると理にかなっているとも感じました。

次回は S3 からのインポートを試してみたいと思います。

AWS運用自動化サービス「Cloud Automator」