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

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

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

Tableau:分かりやすいLOD – INCLUDE編前のページ

Tableau:累計ユニークカウント数を時系列グラフで表現する次のページ

ピックアップ記事

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

関連記事

  1. Tableau

    Tableau 2021.1 新機能紹介

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

  2. Tableau

    Tableauで長い文字列データをシート上で折り返す方法

    こんにちは。今回はTableauの小技を紹介します。ビジュア…

  3. Tableau

    【TC19ブログ】Tableau新データモデリング(リレーションシップ)解説

    ※本記事はTC19のDevsOnStageで発表と、TC19でのセッシ…

  4. Application Integration

    Google Cloud iPaaS 「Application Integration」を使ってみた…

    こんにちは、エクスチュアの黒岩です。今回の記事では、Goog…

  5. Firebase Analytics

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

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

  6. Google Analytics

    Google Analytics 4: イベントパラメータをセッションスコープで集計する方法

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

カテゴリ
最近の記事
  1. Manusを使ってみたうえでManusに感想ブログを書かせて…
  2. SquadbaseとStreamlitでお手軽アプリ開発
  3. [Snowflake Summit 2025] Snowfl…
  4. [Snowflake新機能]AI_AGGを試してみた
  5. Snowflake Summit 2025 参加レポート【D…
  1. 赤の女王

    データサイエンス

    進化学に倣う最適化手法「遺伝的アルゴリズム」
  2. Tableau

    Tableau×Teams連携
  3. Databricks

    Databricks: Spark RDDで使う主なメソッド
  4. Amazon Web Services

    セキュリティグループ vs ネットワークACL
  5. Firebase Analytics

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