Snowflake のデータロードの方法をまとめる #SnowflakeDB

2019.11.05

こんにちは。大場です。

Snowflake では、これから触れる方向けに Getting Started Videos が用意されています。

本記事では、5つめの「Introduction to Data Loading」の動画に沿って Snowflake でのデータロードの方法を紹介します。

データロードにおける4つのオプション

Snowflake では、データロードにおいて4つのオプションが用意されています。

  • Limited Data
    • Webインターフェース
  • Bulk Data
    • SQL/SnowSQL
    • Snowpipe → バルクロードを自動化
    • ETL → サードパーティのツールを使用

また、SQL/SnowSQL の利用においては、以下のデータのバルクロードができます。

  • 構造化データ:カンマ区切りのCSVファイルなど
  • 半構造化データ:JSON、Avro、Parquet、ORC ファイル

オプション1:SQL/SnowSQL

まず、バルクロードは2つのフェーズで実行されます。

  • フェーズ1:ステージング
    • Snowflake からアクセスできる場所にデータファイルをアップロードします。
  • フェーズ2:ローディング
    • ステージファイルのデータをテーブルにロードします。

フェーズ1:ステージング

ステージと呼ばれる内部のロケーションにファイルアップロードします。各テーブルとユーザーにはステージが存在します。また、ネームドステージの作成もできます。

内部のステージにより、外部リソースなしにデータファイルを簡単かつ安全に保管できます。一方で、データファイルが、既にサポートされているクラウドストレージにある場合は、フェーズ1をスキップして、場所のURLとアクセスするための情報を入力するだけで、外部から直接読み込むことができます。

外部の場所を指すネームドステージを作成する、といった使い方もできます。

フェーズ2:ローディング

仮想ウェアハウスを実行してローディングをおこないます。

ウェアハウスは各ファイルからデータを抽出し、テーブルの行として挿入します。ウェアハウスのサイズは、大量のファイルまたは大きなファイルをロードするときのパフォーマンスに影響があるので必要に応じてより大きなウェアハウスを選択します。

動画では SQL/SnowSQL を使用して CSV ファイルをローカルマシンから指定のデータベースのテーブルにロードする方法を紹介しています。

具体的には以下のような手順が紹介されています。

  • 「csvfiles」という名前でステージを作成
  • put コマンドを実行して「csvfiles」に  CSV ファイルをアップロード
    • files ではステージングするファイルをフルパスで指定
    • ワイルドカードを使用して複数のファイルをロード
    • @ でステージングする場所を指定
    • put コマンドはデフォルトで「gzip」を使用してデータファイルを圧縮
  • ファイルが保存されたことを確認するには list コマンドを使用
  • 仮想ウェアハウスを指定し copy コマンドでファイルをロード
    • into:データをロード先のテーブル名を指定
    • from:ステージファイルの場所を指定
    • PATTERN:ロード対象のデータファイルを指定(1〜4の数字を含む名前のデータファイルから読み込み)
    • ON_ERROR:ファイル内でエラーが発生したときに実行するコマンドを指定

ロード成功したら SQL を使用してクエリが実行できます。

オプション2:Snowpipe

ステージや外部からのバルクロードにおいて Snowpipe が使用する方法があります。

Snowpipe は、基本的に copy コマンドを使用してデータロードをおこないますが、このプロセスを自動化できる機能をもっています。この方法では、仮想ウェアハウスは不要で、内部のコンピューティングリソースを使用してデータを継続的にロードします。仮想ウェアハウスが不要なため、課金はロードされた実際のデータに対してのみおこなわれます。

オプション3:ETL

Snowflake は、さまざまな 3rd party のアプリケーションおよびサービスをサポートします。

ETL ツールの使用に興味があり、検討中の場合は、Snowflake Partner Connect を使用すると任意のサービスの無料トライアルを簡単におこなえます。

オプション4:Web インターフェース

Web インターフェースでデータロードのウィザードを使用します。

ロードするテーブルを選択して「ロード」ボタンをクリックするだけです。ウィザードでは、上述の2つのフェーズを GUI から操作することによりロードを簡素化します

ロード後にすべてのステージファイルを自動的に削除します。ただし、ウィザードは少量のデータ・少数のファイルのみをロードすることを目的としていますので、大量のデータの場合には他のオプションのいずれかを使用します。

さいごに

動画に沿ってデータロードの方法をご紹介しました。

データロードについては、以下のドキュメントにまとまっております。

また、本記事でご紹介した SQL/SnowSQL でのデータロードの手順は、以下で紹介しておりますので参考になさってください。それではまた。