こんにちは、エクスチュア渡部です。
TableauでBigQueryに繋いで分析したりダッシュボードを作ることは、
BigQueryの強力な集計基盤とTableauの自由な分析・可視化体験がコラボする夢のような仕組みです。
ただ、BigQueryはご存知の通りクエリの都度課金なので、インスタンス課金のRedshiftのような感覚で使用していると、
知らない間にクエリが大量発行されて課金が嵩んでしまうケースもあります。
そこで、今回はそんなTableau×BigQueryのメリットを存分に享受できるよう、
事前に知っておくと役に立つ課金対策を紹介しようと思います。
==================================
(1)抽出で済むなら抽出を使う
クエリ都度課金は、BigQueryを「ライブ接続」で使用するからこそ起きる問題です。
データの接続を「抽出」にして使用すれば、抽出の更新時などを除き課金の心配は不要になります。
ただ、これは接続するデータがあまり大きくないことが前提になります。
抽出ファイルを作成するのに時間がかかりすぎてしまう or 事情により抽出を使用できない場合は次の対策を実行しましょう。
(2)Tableauのドラッグ&ドロップの度に課金される対策をする
ライブ接続でBigQueryに接続していると、キャッシュが使用される機会などを除き、
基本的にはTableauでのドラッグ&ドロップの度にBigQueryで課金されています。
行やマークに何か一つ置くたびにクエリが走り、Tableau上のクエリの実行をキャンセルしても
BigQueryで中止しない限りは最後まで実行され課金対象となってしまいます。
Tableauである程度操作をした後BigQueryのクエリ履歴を見ると大量にクエリが発行されている・・・という体験をしたこともある方も少なくないのではないでしょうか?
この対策として、「Tableauで狙った形での配置が終わるまでは、自動更新の一時停止を行う」という手段があります。
Tableauの上の方にあるデータソースの一時停止マークを押すだけです。
これをクリックすると、データソースの自動更新が一時停止され、
再度クリックを押すまではクエリを流す(課金が発生する)のを防ぐことができます。
(3)日付別テーブルではなく、Column-based-partitioning-fieldを使う
BQで日付別にテーブル名を分けて_table_suffixで集計したい日付範囲を指定する「日付別テーブル」を使用されている方も多いと思います。
ただ、この日付別テーブルは現状Tableauで接続すると、1日1日のテーブルが別々のテーブルとして認識されてしまいますね。
TableauでカスタムSQLとパラメーターを用いて任意の日付範囲を持ってくるということは出来なくはないですが、
正直扱いづらいですし日付範囲をパラメーターで指定するとなると、
ダッシュボードとしての展開する場合ユーザーに与えられる自由度も減ってしまいます。
そんな解決策として、まだβ版ですがリリースされている機能である
BigQueryのColumn-based-partitioning-fieldを使うという手があります。
https://cloud.google.com/bigquery/docs/creating-column-partitions
Column-based-partitioning-fieldとは、日付型やタイムスタンプ型の列をpartitioning-fieldとして指定することで、その日付の範囲でしかBigQueryで課金されない仕組みです。
これを使用することで、任意の日付の範囲での課金に済ませられるほか、ダッシュボードユーザーにも直感的な日付範囲でのフィルターを実現することができます。
ちなみに、column-based-partitioning-fieldはstandardSQLでしかサポートしていないので、
Tableauのデータソース画面上でレガシーSQLのチェックを外してから使用してください。
(4)不要な行と列は事前に取り除いたテーブルに接続する
BigQueryの課金は「選択されている列」と「その列に含まれるデータの容量」に依存します。
そのため、特にダッシュボードで表示する際の用途など、表示したい値が決まっている場合は、
不要な行や列をBigQuery上で事前に掃除しておくことで、Tableau上での課金を大幅に抑えることが可能です。
例えば、「日付別のユーザー数」を集計したい場合、下記の2つのデータソースではどちらが(課金的に)適しているでしょうか?
左側はタイムスタンプ×イベント×ユーザーID単位のレコードとなっているため、行数が余分に増えてしまいますね。
日付別のユーザー数が出したいのであれば事前に右の形のようにBigQueryで集計してしまう方が行数が少なくなります。
また、事前に集計することで不要な集計の手間を省けるのでダッシュボードのパフォーマンスも良くなるという一石二鳥なので、
極力データソースの最適化を行なってから接続しましょう。
ちなみに、これは「BQ上でビューを作成してそこに接続する」という意味ではありません。
BigQueryのビューでは結局元データにクエリが走ってしまうので課金対策にはなりません。
ビューではなく再集計したテーブルが出来上がるようにしましょう。
========================
エクスチュアは、技術力とデータ分析力を軸に企業のマーケティング課題の解決を行う企業です。
Tableau、Google Cloud、Adobe Marketing Cloudなどにおいてプロフェッショナル資格を持つスタッフ達が、
デジタルマーケティングからビッグデータ分析まで統合的にサポートします。
お問い合わせはこちらからどうぞ
ブログへの記事リクエストはこちらまで