まずはSnowflakeドキュメントを読むことをおすすめしますが、手っ取り早く概要を掴みたい場合、情報が誤っている可能性もありますが、ご自身の責任と判断のもとでお役立てください。執筆時点の個人が集めた情報になります。
Snowflakeとは
クラウド上(AWS, Azure, GCP)で動くSaaSのデータウェアハウス。ハードやソフトの導入、管理も不要なので、申込んですぐに利用が開始できる。
これまでの似たような製品と異なるのは、シェアード・エブリシング、シェアード・ナッシングのいいとこ取りをしており、コンピューティングリソースとストレージリソースを分離して管理しているので、必要なタイミングで負荷対策ができる。
2020年にIPOしている。
柔軟な負荷対策
パフォーマンス
データ管理
- データシェアリングを使えば、異なる組織でデータが共有できる。また、データのレプリケーションもできる。ゼロコピークローニングで開発環境から本番環境に即座に移行可能。あとはAthenaなどにもあるタイムトラベル機能もある。
柔軟な課金料金
- ウェアハウスの稼働時間に応じて費用が発生する。
エディションの違い
スタンダードが基本的なエディションになり、エンタープライズでは「マルチクラスタ」「マテリアライズドビュー」「検索最適化サービス」などの機能が追加されている。
ビジネスクリティカルでは「PrivateLink」などのセキュリティ関連が強化されており、バーチャルプライベートでは「顧客専用の仮想サーバー」とあるように、より強固なセキュリティのもとでデータウェアハウスを構築できる。
トライアル申し込み
公式サイトのトライアル申し込みを行うとトライアルがすぐに可能になる。ここではAWS環境のエンタープライズエディションでトライアルを開始する。メールが届くので、アカウントのアクティベーションを行うと、ユーザー作成画面に遷移して、ログインができるようになる。
アクティベーション用のメール内にSnowflakeにアクセスするアカウント専用URLが記載されているので注意。
「30日間の無料トライアルを開始する」と書いてあったが、表示は58日になっている理由は知らない。
ユーザーインターフェース
画面上側にあるユーザーインターフェースの項目について簡単にまとめておく。
ワークシート
SQLを記述してデータを処理するためのスペース。画面左側には、データベース、スキーマ、テーブル、カラムが表示される。左下にはテーブルのレコード数やカラムの情報が表示される。
ここでは、デフォルトで用意されているTCPDS(DBのベンチマークでよく使われているデータ)のサンプルデータを利用する。
「TPCDS_SF100TCL」という数字の100は、相対的なデータのサイズを表現しており、「TPCH_SF1000.LINEITEM」テーブルは「5,999,989,709 行159.3 GB」という、なかなかのサイズのサンプルデータが格納されている。
画面右上の部分で、ロールの変更、データウェアハウスのクラスタ設定、データベース、スキーマ変更が可能。
ウェアハウス
作成したウェアハウスが確認できる。「構成」のボタンを押すと、ウェアハウスの構成を確認できる。クラスタサイズの変更やマルチクラスタで使用する最大クラスタ数、スケーリングポリシー、自動一時停止の設定が変更できる。動かしていないと自動一時停止で設定した時間で停止するので、クレジットが利用されず、お財布にも優しい。自動再開ボタンは、停止中にクエリが発行されると自動でウェアハウスの起動を再開するという設定。
クラスタサイズは課金に大きく影響するので注意。XSは一番小さいクラスタであり、5XLが一番大きいサイズ。時間あたり1クレジットと256クレジットの違いがあるが、簡単説明すると、同じ量の仕事をする場合に、高単価、最小時間をかけて処理するか、低単価、最大時間をかけて処理するか、というような違いがある。
ウェアハウスを複数作成して、異なるサイズのクラスタを割り当てておけば、利用者の目的に応じたウェアハウスを作成できる。
データベース
Snowflakeに保存しているデータベース、テーブル、ビュー、スキーマの作成、確認できる。ここかたデータベースの作成やテーブル定義なども行えるが、ワークスペースでSQLを使うほうが楽かも。
「ステージ」というのは、ファイルからテーブルにデータをロードする際に、ステージを作ることができ、それを管理するもの。「ファイル形式」はステージにあるデータの形式を確認できる。「パイプ」は、ステージのデータを検知して、ファイルをテーブルにロードする機能を管理することができる。
共有
アクセスするには「アカウント管理者に連絡してください。」とあるようにACCOUNTADMIN権限でなければ使用できない機能。この機能を使うことで、共有されているデータを使用したり、他のユーザーにデータを提供したりできる。
左上のタブが「インバウンド」になっている場合、外部の組織から共有されているデータベースが表示されている。デフォルで用意されているサンプルデータもインバウンドで共有されているデータとわかる。「アウトバウンド」では、このアカウントから外部のアカウントに共有しているデータベースを管理できる。
インバウンドは提供されていデータベース、アウトバウンドは共有しているデータベースということになる。
データマーケットプレイス
データマーケットプレイスでは、データを販売している企業のデータや、パブリックで公開されているデータをデータベースとして取り込むことができる機能。「Snowflake Data Marketplaceを探索」をクリックして進むと、共有されているデータの一覧が確認でき、画像の例は、Knoema社が公開しているCOVID-19 Data Atlasという無料のデータの詳細画面。基本的には有償のものが多いのかもしれない。
履歴
ここでは実行されたクエリの詳細(過去2週間分)を確認できる。正確な表現ではないかもしれないが、スキャンを必要としないDDL、DCL系のコマンドはスキャンの数値の表示がない。一方で、DML系のコマンドは同じコマンドであってもキャッシュから情報が取れる場合は、スキャンされない場合もあるのでスキャンサイズは異なる。クラスタ、サイズ列に情報がある場合、ウェアハウスのリソースを消費したことになる。
「クエリID」をクリックするとSQLの処理の詳細が確認できる。SQL文や視覚化された実行計画も確認できる。
アカウント
ACCOUNTADMIN権限でなければ使用できない機能。ここでは、Snowflakeの使用状況、請求情報、ユーザー管理、ロール管理、ネットワークポリシー、リソースモニター、リーダーアカウントなどの管理ができる。リーダーアカウントは読み取り専用ユーザーのことで、組織外のユーザーにアカウントを発行できる。このアカウントを通じて、データを共有できたりする。このアカウントのクレジットが消費された場合、発行した側が受け持つ。
セッション
このアカウントのSnowflake環境に対して、誰がいつ、どのようなデバイスで、どのような認証方法を使ってセッションを確立したかを確認できる。
ネットワークポリシー
ネットワークポリシーを使うことで、このSnowflakeアカウントの環境に対して、特定のIPアドレスからのアクセスしか受け付けないように設定できる。
リソースモニター
クレジットの消費量に対して、停止や通知などの管理ができる。現状の使用量を把握したい、予算以上使いたくない場合は、この機能の設定は必須である。
ロール
画面右上のアカウントボタンのところから変更ができる。
- ACCOUNTADMIN(アカウント管理者):最上位の権限をもつロール。
- SYSADMIN(システム管理者):ウェアハウスとデータベースを作成する権限をもつロール。
- SECURITYADMIN(セキュリティ管理者):オブジェクトの付与をグローバルで管理して、ユーザーとロールを管理できる。
- USERADMIN(ユーザー管理者):ユーザーとロールの管理に使用するロール。
- PUBLIC:アカウントのすべてのユーザー、ロールに自動付与される最下層のロール。
- ORGADMIN(組織管理者):組織を管理するためのロール。
データウェアハウスの作成
ここではデータウェアハウスの作成からSQLの発行までを行う。まずは「データウェアハウス」に移動して、作成をクリック。ここではNYの黄色タクシーのトリックプデータを利用する。
下記のSQLでも同じ事ができる。
CREATE WAREHOUSE yellow_taxi_wh WITH WAREHOUSE_SIZE = 'XSMALL' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 300 AUTO_RESUME = TRUE MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 1 SCALING_POLICY = 'STANDARD';
yellow_taxi_wh
ウェアハウスを作成後はパブリックのユーザーが使えるように権限を与えておく。
データベース、テーブルの作成は下記のSQLを「ワークスペース」で実行することで作成する。yellow_taxi
データベースのPUBLIC
スキーマーに、triplogs
テーブルを作成する。
CREATE DATABASE yellow_taxi; GRANT USAGE ON DATABASE "YELLOW_TAXI" TO ROLE "PUBLIC"; CREATE TABLE "YELLOW_TAXI"."PUBLIC"."triplogs" ( VendorID bigint, tpep_pickup_datetime timestamp, tpep_dropoff_datetime timestamp, passnger_count integer, trip_distance double, RatecodeID integer, store_and_fwd_flag string, PULocationID integer, DOLocationID integer, payment_type integer, fare_amount double, extra double, mta_tax double, tip_amount double, tolls_amount double, improvement_surcharge double, total_amount double, congestion_surcharge double) // ダブルクオーテーションで囲む // drop table "YELLOW_TAXI"."PUBLIC"."triplogs";
csvのインサートは、「データベース」から「テーブル」を指定してインサートを行う。
データをロードするためには、「ウェアハウス」「ソースファイル」「ファイル形式」「オプション」などを設定する必要がある。データのロードが完了したら「ワークスペース」からSQLを発行する。