Google BigQuery

Tableau×BigQueryをコスパ良く使う方法

こんにちは、エクスチュア渡部です。

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などにおいてプロフェッショナル資格を持つスタッフ達が、
デジタルマーケティングからビッグデータ分析まで統合的にサポートします。

お問い合わせはこちらからどうぞ

ブログへの記事リクエストはこちらまで

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Tableau

    Tableau Desktop 2020.1の新機能を全て解説してみた。

    はじめに昨日(2020/2/25)、Tableau Desktop …

  2. Firebase Analytics

    Firebase AnalyticsのデータをフラットなCSVに変換するETL処理

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Tableau

    【TC19ブログ】セッション紹介:DataRobot×TableauでAIを民主化する

    こんにちは。エクスチュアインターン生の酒井です。11/12(火…

  4. Google Cloud Platform

    Looker: LookerbotでSlackにグラフ画像をスケジュール投稿する

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  5. Google BigQuery

    BigQuery BI Engine解説

    こんにちは、エクスチュア渡部です。2019/4/9-4/11に行わ…

  6. Tableau

    Tableau Serverの基礎をまとめてみた

    【目次】・はじめに・Tableau Serverが必要な理由・環…

最近の記事

  1. Mouseflowのセッションリプレイのしくみ
  2. LangChainって何?: 次世代AIアプリケーション構築…
  3. 1st Party Cookieと3rd Party Coo…
  4. Amplitudeで何が分かる?
  5. SnowflakeのHybrid Tableのマニュアルを読…
  1. IT用語集

    仮想マシン(VM)って何?
  2. IT用語集

    カプセル化(Encapsulation)って何?
  3. Google Cloud Platform

    Node.js+GAE: 日本語自然文を形態素解析してネガポジ判定をする
  4. Google Tag Manager

    GTMで複数のコンテナに同じ実装をしたい
  5. Google Apps Script(GAS)

    Google App ScriptとGoogleスプレッドシートを連携させる
PAGE TOP