Snowflakeにデータを一括保存する方法
AkimasaKajitaniです。
過去に「パソコンはソフトがなければただの箱」という名言(?)がありました。「データベースもデータがなければただの箱」と言った人はいるかどうかは知りませんが、Snowflakeもデータを入れてこそ役に立つものになります。
今回は、Snowflakeにデータを一括ロードする手段をデータウェアハウス初心者の方向けにまとめてみました。ちなみに、データベースにデータを保存することを「ロードする」という言い方をします。
それではロード方法を見ていきたいと思います。
Snowflakeにデータを一括ロードする方法
Snowflakeにデータを一括ロードする方法はいくつか存在します。その手法について、リストアップしてみました。
- WEBのUI(Snowsight)からローカルのファイルをアップロードして直接ロード
- ステージングしたファイルをCOPY INTOする
- クラウドのオブジェクトストレージ(S3/GCSなど)経由
- SnowSQLを用いた内部ステージング経由
- Snowflakeネイティブコネクタの使用
- サードパーティベンダーによるツールの利用(Ingestionツール、ETLツールの利用)
1の「WEBのUI(Snowsight)からローカルのファイルをアップロードして直接ロード」は、WEBのUI経由なので誰でも知識がなくても簡単にできる方法です。ただし自動化はできません。「とりあえずデータを入れてSnowflakeの速度を体感したい」といったような場合、つまり「まず使ってみる」という場合には良いかと思います。
2の「ステージングしたファイルをCOPY INTOする」は、Snowflake単体で行う場合の一般的な方法です。クラウドストレージを使うのであれば一括ロード後はそのままSnowpipeによるストリーミングによるデータのロードに移行も可能です。ただし、設定はクラウド側の設定に慣れていないと結構面倒かもしれません。
SnowSQLはコマンドライン用のツールですが、これを使う場合はオンプレのサーバーから直接データをロードするような場合に向いています。バッチ化すれば自動化もそれほど難しくないでしょう。
3の「Snowflakeネイティブコネクタの使用」は、ファイルベースのものには対応しておらず、SaaSやDBなどのみ対応しています。オンラインにあるデータソースを利用していて、対応していればコストも安く済むので積極的に利用したいところです。ただ、まだまだ対応しているシステムは少ないです。
4の「サードパーティベンダーによるツールの利用」は、どのベンダーのどのシステムを使うかによりますが、様々なソースに対応できますし、自動化などまで考えると手間は大きく省けます。ただし、その分のコストはかかります。
どんなファイル/システムからロードできますか?
ファイルベースのデータは、基本的にテキストベースの形式(CSVやJSONなど)のみ対象となっています。ExcelやAccessのファイルなどはデフォルトでは対応していないため、サードパーティベンダーの製品を使うか、一度CSVなどテキスト形式に変換をかけてからロードする、ということになります。
上の1~4の方法の対応形式は以下の通りとなります(Snowflakeは機能の進化の速度が早いため、正確にはSnowflake社の公式ドキュメント を参照ください)。
- 1、2のサポートファイル形式:CSV/TSV、json、orc、avro、parquet
- 3のサポートシステム:Kafka、ServiceNow、Google Analytics。今後は、PostgreSQL、MySQLも直接接続できるようになると発表されています(Google Analyticsは結局BigQuery経由になります)。
- 4はサードパーティベンダー次第ですが、様々なものに対応可能です。Excelファイルをロードしたいような場合にも対応可能なものもあります。
どの方法を使うのが良いのか?
どの方法が良いかは、利用者の状況次第となります。データをなるべくリアルタイムに取り込みたいのか、どれくらいのデータを投入しないといけないのか、データソースは何なのか、コストはどの程度かけられるのか、技術者はどの程度在籍しているのか?など。メーカーとしては基本自社の機能を使うことをベストプラクティスとしていると思いますので、サードパーティベンダーの製品との比較の話はほぼ出てこず、サードパーティ製品とは比較しにくいかと思いますが、サードパーティベンダーも便利な製品を提供しているのでそちらも含めて検討したほうが良いかと思います。
この部分については個人的な感想も入りますが、しっかりとしたデータエンジニアリングチームがいるのであればSnowpipeを使っていくのがコスト的にも良いのではないかと思います。ただ、それほど手間をかけたくない、ということであればサードパーティのツールを選択するのが良いかと思います。
参考リンク