1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1000個のjsonファイルをSnowflakeのテーブルにロードした備忘録

Posted at

これはなに

手元に1000個のJSONファイルがありました。ファイルサイズは全部で16GB。これを効率的に分析したくてSnowflakeに突っ込んでみた記録です。

実行環境はMacOS 14.6.1です。

おおまかな手順

  1. snowsqlをインストールする
  2. snowsqlでログイン
  3. ステージを作る
  4. ステージにファイルをアップロードする
  5. ステージ上のファイルからテーブルにデータを読み込む

webuiでもデータのアップロードは可能ですが一度に250MBまでしかできません。全部で16GBありますので50回以上手動のアップロードを行うのはミスもありそうですし避けたいです。そのためsnowsqlを使うことにしました。

snowsqlを使う場合、いきなりjsonファイルからテーブルを作ることはできなかったのでステージにjsonファイルを全部アップロードして、ステージ上のjsonファイルからテーブルを作っていきます。

1.snowsqlをインストールする

インストール手順は以下に記載があります。

やり方は超簡単。まずはbrewでsnowsqlをインストール。

$ brew install --cask snowflake-snowsql

次にaliasを設定。これで終わり

alias snowsql=/Applications/SnowSQL.app/Contents/MacOS/snowsql

2.snowsqlでログイン

snowsqlでログインしていきましょう。

snowsql -a {アカウント名} -u {ユーザー名} -d {データベース名} -s {スキーマ名}

ステージはスキーマないに作成されるので作成するテーブルと同じ場所を指定しました。

3.ステージを作る

以下から記載しているコマンドはsnowsqlのコマンドラインで発行するものです。

以下のクエリでステージを作ります。

CREATE OR REPLACE STAGE my_internal_stage;

4.ステージにファイルをアップロードする

ステージができたらPUTでローカルファイルをアップロードします。

PUT file://{ファイルパス}/*.jsonl @my_internal_stage;

もっとかかるかと思ったけど5分くらいで終わりました。

5.ステージ上のファイルからテーブルにデータを読み込む

Tableの定義を作るために一度WEBUIで一つだけjsonファイルを読み込んでテーブルを作りました。テーブル名はtable_from_jsonとして説明を続けます。

image.png

その後、テーブルの中身をすべてDELETEして、COPY INTOでデータを読み込みました。

//すべてのレコードを削除
DELETE FROM table_from_json;

//jsonを読み込むためのformatを定義
CREATE OR REPLACE FILE FORMAT my_json_format
  TYPE = 'JSON'
  COMPRESSION = 'AUTO';

//my_internal_logにあるjsonファイルを読み込み
COPY INTO table_from_json
FROM @my_internal_stage
FILE_FORMAT = (FORMAT_NAME = 'my_json_format')
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE;

以上で無事に1000個のjsonファイルから1つのテーブルを作ることができました。めでたしめでたし。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?