※ 本記事はデータ分析エリアで活躍する利用者にとって少しでも有益となる情報の提供を目的としています。Tableau 社 / Snowflake社からの正式レビュー、製品発表とは一切関与がなく個人の自由な知見と意見に基づいています。
※ リリース発表前の製品動作、仕様はリリース時に変更となる場合がございます。
※ 誤りのご指摘、修正依頼、違う観点でのご意見、大歓迎です。ご連絡ください。 DMどうぞ! Twitter@datarockstartky
以上、ご理解の上参照頂ければ幸いです。よろしくお願いします。
2020年6月中旬の時点でTableau 2020.3のβ評価が始まりました、その中でTableau Prep Builder の新機能としてリレーショナル・データベースへの書き出しができるようになる予定ということです。
この記事では、Tableau Prep Builder から今話題のクラウドデータウェアハウスであるSnowflakeにフロー結果を書き出す手順を実行して見ます。
また、そこそこの容量のCSVファイルをSnowflakeに置き換えてパフォーマンスがどのように良くなるかTableau Desktopのダッシュボードで比較してみたいと思います。
目次
1. Tableau Prep Builder 2002.3β からSnowflakeに書き出す
2. Snowflake,CSV,Hyperのパフォーマンスを比較する
伝えたいポイント
■ Tableau Prep Builder 2002.3β のデータベース書き出しが結構簡単なのでリリースされたら是非使ってみて欲しい。
■ ローカルCSV、HyperとSnowflakeでパフォーマンスを比較した。
■ ギガバイト単位でローカルにCSVを保管しているなら、Tableau Prep Builderで簡単にSnowflakeにデータ投入できるし、データベースをクラウド化を検討するときかも。
1. Tableau Prep Builder 2002.3β でSnowflakeに書き出す
さて、今話題のSnowflakeですが、一言で言えば、クラウドベースのデータウェアハウスでRedshiftやBigqueryと同じ部類に入ると考えると分かりやすいでしょう。クラウド上にある(特にデータ参照系に強い)データベースサーバーにデータを格納し、利用した分だけ金額を支払えば良いということになります。DBサーバーを立てて、インストールして、ソフトウェアのメンテナンスをして・・・ということは一切不要。サインアップしてデータを投入すればすぐ使えるということですね。
クラウドデータウェアハウスの利用は一般的になりつつありますが、一方で
「うちのデータはGB単位だけどPCに保管しているんだよね。」
「クラウドデータウェアハウス・・・ちょっと面倒で・・・」という方もいらっしゃるように思います。
とりあえず簡単なので、まず使ってみましょう。
Snowflakeへのユーザー登録の仕方、Tableauからの接続の仕方については INSIGHT LAB株式会社 さんの記事「Tableau Desktopで超高速DWH『Snowflake』に接続してみた」がとても分かりやすい!ので、こちらのページを参照にさせていただきました。(ありがとうございます!)30日間フリートライアルがありますので早速使ってみましょう!
・ Snowflake にアクセスし、情報を入力
・ アカウントのアクティベート
・ ODBCドライバーをダウンロード
・ Tableau から接続
以上となります。上記のリンクを参照すれば簡単にTableauからSnowflakeが利用できるようになります。
今回は最小構成の X-Small、1ノード構成を利用しています。
任意のデータベースをクリックすると、データベースに作成されているテーブルがリストされます。Tableau Prep Builderからデータを書き出すときに必要な列は自動的に作られますが、対象の表は指定しなければいけない(2020.3β時点)ようなので、適当に表のみを作成します。(ここではCUSTOM_JAPANという名前にします。)
今回は Tableau Prep BuilderからSnowflakeにデータを投入することが最初の目標ですので、早速やってみます。Tableau Prep Builder 2020.3 β版はこちらからダウンロードできます。
今回は、Kaggle で Tadashi Nagao さんが提供してくださっている、日本貿易データをダウンロードします。
以下のテーブルデータを利用しました。
トランザクションデータ | custom_2018.csv | 637.34 MB |
トランザクションデータ | custom_2019.csv | 548.13 MB |
トランザクションデータ | custom_2020.csv | 121.66 MB |
品目マスター | hs2_jpn.csv | 7.14 KB |
品目マスター | hs4_jpn.csv | 206.28 KB |
品目マスター | hs9_jpn.csv | 478.2 KB |
国名マスター | country_jpn.csv | 9.17 KB |
2018年~2020年(6月20日現在2020年4月まで)の品目、相手国別の日本貿易(輸入・輸出)履歴情報のデータがあります。トランザクション表と品目マスタ、相手国マスタを結合し、636万件、23列のデータとなりました。ここまでは通常通りTableau Prep Builderでフローを作成します。
2020.3βでは、最終的な「出力ノード」のところで、「データベース表に書き込む」という選択肢が現れます。
ここに、接続情報、ウェアハウス、データベース、スキーマ、書き込み対象となる表の情報を指定します。
書き込みオプションも「表の作成」「表に追加」「データの置換」から選べます。今回は「表の作成」で新規に表を作成します。
フローを実行します・・・頑張っています。
今回利用した メモリ16GB Mouse MBX400H Pro Windows 10 にて 3分24秒で終了しました。
フローが完了したところで、SnowflakeコンソールでHistoryを確認します。
COPY INTO というところがSnowflakeから見たデータの投入でこちらは 35.1 sec 所要しています。操作が成功していることが即座に見えるのが良いですね!
2. Snowflake,CSV,Hyperのパフォーマンスを比較する
テーブルを確認すると630万件、157.7MB のデータが入っています。大分容量は小さくなっています。
コンソールのWorksheetsではSQLを書いて発行できますが、ここでデータ投入したテーブルのプレビューをするときちんとデータが入っているようです。
出力をCSVとHyperそれぞれでも実施してみます。出力サイズは以下のようになりました。
※ ちなみに「Hyper」とはTableauユニークなデータキャッシュ構造体で内部的にはカラムナー(列志向)のデータベース構造です。「抽出を作成」すると作られるキャッシュと同じで、Tableau Prep Builderの出力形式としても選択可能です。
630万件、23列 貿易データ | |
Snowflake格納 | 157.7MB |
CSV | 約 2.6 GB |
Hyper | 129.1 MB |
ここで、Snowflake、CSV、Hyperで同じ構造のワークブックを作成し、ワークブックを開くときの時間をTableau Desktopの「パフォーマンスレコーディング」の機能を使って検証してみます。「パフォーマンスレコーディング」の機能を使うと、ワークブックのどの処理でどれだけ時間がかかっているかが分かり便利です。
検証では以下のように、3年間の貿易総額の推移を国ごとに色分けする簡単なグラフを作り、開く前にTableau Desktopのキャッシュをクリアして、Snowflake,CSV,Hyperのそれぞれをデータソースとするワークブックを、初回に開くときの所要時間を比較します。
このくらい(630万件)のデータ量での体感速度としては:
速い ← Hyper < Snowflake <<< CSV → 遅い
となりましたが、もう少し具体的な差をTableau のパフォーマンス・レコーディングを使って比較してみたいと思います。
① まず、Snowflakeに接続したワークブックを開いたときのパフォーマンスレコーディングです。Snowflakeログインパスワード入力のため途中中断していますが、Snowflakeに関連する処理として以下の時間が計上されました。
データソースへの接続(Connecting to Data Source オレンジ): 3.858 sec
クエリの実行(Executing Query 緑): 3.347 sec
Tableauのパフォーマンスレコーディングでは対象の「Executing Query」をクリックして実行されたクエリ―を確認することができます。
SnowflakeのコンソールでHistoryを確認すると、Snowflake上で実行されたクエリ―と実行時間がその場で確認できます。Snowflake上ではクエリ―の実行時間は 72ms (0.72 sec)と短いですね。Tableau側で時間が大きく計上されている場合はネットワーク遅延に原因があるかもしれないと問題判別ができます。
② 次はCSVに接続したワークブックを開いたときのパフォーマンスレコーディングです。実際には、Open Workbookに時間がかかっています。Connecting Data Source / Executing Query自体は非常に短いため、全体の所要時間で比較した方がフェアでしょう。
最初に開く際には以下のメッセージ画面のまま待ち時間が発生しました。経過時間は50秒から1分10秒程度となりました。結構待ちますね。
③ 最後にHyperに接続したワークブックを開いたときのパフォーマンスレコーデイングです。
データソースへの接続(Connecting to Data Source): 0.0642 sec
クエリの実行(Executing Query): 0.1172 sec
今回、Snowflake、CSV、Hyperで機能構造が違うため、クエリーの発行時間では単純に性能が比較できないため、Tableau Desktopのキャッシュを削除した上で、初回のワークブックを開く時間を比較しました。Snowflakeにももちろんキャッシュはあるかと思いますが、そこは制御できないのでSnowflakeのキャッシュには乗っているものと仮定します。
また、Snowflakeについては途中ログインパスワードを入力する時間は受動的な待ち時間とはカウントせず除外するということにしました。ということで、色々オリジナルな条件の元の結果ですので、全く正確性を持った性能比較ではありません。あくまでほんの参考情報程度として受け止めてください。(判断・評価目的での転載利用はご遠慮ください。)
以上踏まえて、Snowflake,CSV,Hyperをデータソースとする同じワークブックを初回に開く時の所要時間は以下のようになりました。
今回はSnowflakeで保管されるデータ量は高々160MB程度となっていますので、Snowflakeから見れば全く本気は出していませんが、ローカルPCにCSVで保管するのに比べれば圧倒的な性能が出ています(当然ですが)。 初回のデータベース接続、ネットワーク負荷を考慮する必要はありますが、これだけ簡単にクラウド上のSnowflakeに移行できることを考えると、圧縮前 3GB程度のCSVファイルをローカルPC上に保管するのと比べれば、メリットが大きいことは明らかですね!
また、Hyper形式でローカルPCにキャッシュを取ることも、パフォーマンスの観点では有効ですが、こちらは当然ながらキャッシュであり最新の情報を取得するには「抽出の更新」によってキャッシュを更新する必要があります。データ鮮度が要求されない場合は利用検討すると良いでしょう。ここは必要に応じて使い分けるとよいですね。
Snowflakeの費用試算については Classmethod – Hiroki Oba さんの記事: Snowflake の費用試算のポイントまとめ が大変参考になります。Snowflakeは「あくまでも稼働した分に対して課金(処理が発生せず、稼働がない場合には費用がかからない)というのが良いですね!
以上、Tableau Prep x Snowflake でローカルデータをクラウドに移行しながらデータ分析の効率化ができるのではないか? という個人的に勝手にちょっとやってみたレポートでした。
最後に:
2020年6月現在Tableau Prep Builder 2020.3 β はβ評価版であり、本機能が2020.3で確実に提供されることが保障されているということではなく、機能やインターフェイスは変更になる可能性がありますのでご了承下さい。
また、プライシングについてもTableau社からの正式な発表を参照頂くようお願いいたします。
以上、この情報が少しでもお役に立てば幸いです。
【追伸】 私が所属するスプライングローバルでは、データ活用の組織内トレーニング、Tableauを基本としたデータ活用、機械学習への応用をはじめとした、ご相談、お困りごと伺っております。
現在(2020/06)、初めての方はZOOMコンサルテーションを初回無料でご利用いただけますので、お気軽にこちらのページまたは TwitterでDMください!⇒ Twitter@datarockstartky
お待ちしています!!
SPINE GLOBAL. Tomohiro Iwahashi
素晴らしい記事有難うございます!
もし可能でしたら実行されたSnowflakeウェアハウスのサイズを参考までに記載いただけないでしょうか。
よろしくお願い致します。
Asano さん:コメント頂きありがとうございます。Snowflakeのウェアハウスサイズについては、コンソールのWarehouse画面から確認できるX-smallかと思いますが、認識が異なっていたら、ご指摘ください。よろしくお願いいたします。