Sigma vs Tableau:Snowflakeに10億規模のデータ接続で見えたユーザ体験の違い
はじめに
今回の記事では、Snowflakeに予め備わっている10億規模のサンプルデータ TPCH_SF1000(Orders 15億件、Customer 1億5千万件、Nation(国のデータ)25件)をベースに、
OrdersテーブルへCustomerとNationを結合して、Sigma(Sigma Computing)とTableau双方から接続したときにどういう違いが出るのか比較してみました。
結論SigmaとTableauではUIの動きやSQL発行のタイミング、処理の設計思想に明確な違いがあるように感じました。
Tableauの動き
Tableau Desktopでは、データソース設定時にリレーションシップを使ってテーブル間のキーを紐付けることが可能です。
この場合、ユーザー操作に応じて必要な結合条件を持つSQLがその場で生成されます。そのため不要な時は結合させない動的な結合で速度向上が見込めます。
描画やクエリ実行の待ち時間中はUI全体がブロックされる設計です。
個々での問題はクエリが20〜30秒かかるような操作を意図せずしてしまった時でも、以下のようなモーダルが出て全体の操作が不能になります。
これにより、「ある操作の結果を見て次のアクションを考える」という思考の流れが中断されやすく、 特にユーザがAd-hocに試行錯誤する場合においてはテンポが落ちやすいこともしばしばです。
Sigmaの動き
Sigmaの場合、JOIN設定時に以下のような画面で結合条件を定義します。
特徴的なのは、全体で常に非同期処理が徹底されていることです。設定画面一つとっても当然SQLはSnowflakeに発行されていますが、仮にそれらのSQLに時間がかかり、仮に結果の取得時にタイムアウトがあっても、UI全体がブロックされないので、操作をし続けられます。
これはデータソース設定画面だけでなく、ビュー編集画面でも同様です。
フィルターを変えて一部ビューが待機状態になっても、他のチャートやテーブルの操作は継続できます。
それぞれの要素が非同期処理で順次更新される
さらに、Sigmaはページング表示が前提となっており、描画側の負荷が一定軽減されており
15億件のレコードであっても、最小粒度のデータをスプレッドシート形式で画面に表示することができました。
Tableauの場合残念ながらこのパターンではどれだけ待っても
データ一覧を表示するための帳票は返ってきませんでした
20分経っても描画されずに悲しい
技術的な背景の補足
-
Tableau
- デスクトップアプリケーションとして独自の抽出形式(hyper)で速度を向上
- DBとのLive接続の多くの操作は同期的に処理され、ユーザー操作はSQL完了を待つ
- リレーションシップ機能により、結合は遅延評価されるが、描画時は大規模クエリが一気に走る
-
Sigma
- ブラウザベースのSaaSアプリで、非同期リクエストを多用
- UIスレッドをブロックせず、バックグラウンドでクエリ実行
- ページングや部分取得により、大規模データでも描画負荷を軽減
まとめ
- Tableau:リレーションシップで効率的にSQLを発行できるが、クエリ実行待ちでUI全体が止まる
- Sigma:非同期処理&ページング表示により、大規模データでも操作を止めずに作業可能
- Live接続による大規模データ探索のテンポという観点では、Sigmaに軍配が上がる印象
データを分析にかけるためになんでも入れればいいというわけではないのでデータ量を抑えることは必要とは思いつつも
大規模データを扱う環境下でストレスなくAd-hocな分析をしていく上で、ユーザ体験は非常に重要です。この体験の違いを考慮すると、Snowflake+Sigmaの組み合わせは、思考の流れを止めない強力な分析基盤になり得るように感じています。