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

    最年少DATA Saberになって感じたこと〜Tableau〜

    【目次】・自己紹介・DATA Saberとは・DATA Sabe…

  2. Tableau

    Tableau 2021.1 新機能紹介

    Tableau 2021.1 新機能紹介今回の2021.1は前回ま…

  3. Google Cloud Platform

    Server-side GTM を Google AppEngine にデプロイする

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

  4. Tableau

    ツールヒントの中にVizを埋め込む理由・方法

    ツールヒントの中にVizを埋め込むとはこちらがツールヒントの中に埋め…

  5. Tableau

    Tableau-折れ線グラフ

    こんにちは!インターン生の市川です。今回は、私の主観なのですが、でき…

  6. Tableau

    Tableau Tips〜WINDOW関数〜

    はじめにこんにちは!インターンの與那覇(ヨナハ)ですこれから不定期…

最近の記事

  1. モダンデータスタックなワークフローオーケストレーションツール…
  2. Streamlit in Snowflakeによるダッシュボ…
  3. Streamlit in SnowflakeによるStrea…
  4. Streamlitを使った簡単なデータアプリケーション作成ガ…
  5. 生成AI機能を活かしたデータカタログ製品「Secoda」を試…
  1. Google Apps Script(GAS)

    文字列置換アプリを作成しました
  2. Google Apps Script(GAS)

    GoogleスプレッドシートのデータをGASで整理する【setValue・set…
  3. Adobe Analytics

    訪問別滞在時間とは-Adobe Analyticsの指標説明
  4. Mouseflow

    mouseflowによる分析の観点
  5. IT用語集

    アドイン(Add In)・アドオン(Add On)って何?
PAGE TOP