BigQuery × Tableau

この記事は約6分で読めます。
sponsored link

BigQueryをDesktopに接続

接続手順

  1. [データソース]から「Google BigQuery」を選択
  2. Googleアカウントでログイン
  3. プロジェクト / データセット / テーブル選択
  4. ビューにテーブルをドラッグ&ドロップ

接続方法「ライブ vs 抽出」

◆ライブ接続

ライブ接続では、BigQuery の持ち味である「大規模データの高速処理」を実現することができます。

ビューを構築する際のクエリはデータベース側で発行され、集計されたデータが Tableau に取り込まれます。

ただ、BigQuery はクエリの都度課金システムなので、”Tableauで何かしらの操作を行うと課金されてしまう” という点に注意が必要です。

そこで課金額を抑えコスパ良くビューを構築するテクニックとして、以下の3点が挙げられます。

  1. データソース / コンテキストフィルターでレコード数を絞る
  2. ビュー構築中は自動更新をOFFにする
  3. 最初にフィルターを追加する

↓自動更新OFFボタン(画像赤枠

◆抽出接続

抽出接続はライブ接続より安価で運用できるので、コストを抑えたい企業で採用されます。

抽出で .hyper ファイルを作成してしまえば、”課金が1回で済み Tableau での読み込みも速くなる” ので、まさに一石二鳥です。

一方、過去数十年分のデータを抽出する際に、”許容制限時間 (2h) を超えてしまい抽出が失敗してしまう” というケースもあるかと思います。

そんなときは「分析で本当に必要なデータは何か」を自問し、*BigQuery 側でデータマートを作成することで、データ量を小さくしてみましょう。

※ BigQuery は列指向ストレージなので「スキャンした列の全行が課金対象」となります。不必要なカラムを取り除いたり、データを必要な粒度に丸めるなどして対応するのが良いです。また BigQuery 上ではビューではなく「再集計したテーブル」を作成するようにしましょう。

◆【結論】ライブ接続 vs 抽出接続

どちらか一方、ではなく両者を使い分けるのが賢い選択です。

通常の分析業務であれば “ライブ” , ダッシュボードの作成/運用であれば “抽出” というように使い分けると良いでしょう。

つまり、これからデータを探索するのであれば BigQuery の強みを活かした “ライブ接続” が適していますし、すでに分析項目が決まっているということであれば “抽出接続” でコストを抑えた方が良い、ということです。

①通常の分析業務では「ライブ」
(フィルタの適用, 自動更新OFF)
②ダッシュボード作成/運用段階では「抽出」
(データ軽量化)
③BigQuery側で「そもそものデータ量を減らせないか」を検討
(直近2年に絞る, 不要カラムの削除, データマートの用意..etc)

BigQueryをServer/Onlineに接続

◆認証情報を埋め込まない場合

Server/Online で BigQuery のテーブルをデータソースとしてパブリッシュするとき、認証情報を埋め込むことができません。

そのためパブリッシュされたデータにアクセスする場合、管理者であっても都度認証が求められます。

◆認証情報を埋め込む場合

一方 Desktop からワークブックをパブリッシュする場合、データソースの認証情報を埋め込むことができます。

認証情報を埋め込んだ場合、BigQuery の権限を持っていないユーザーでも “Tableau上で全てのデータが見れてしまう” ので注意が必要です。

もちろん Server 側でサイト/プロジェクトを個別に管理したり*マスキングすることで、情報漏洩を防ぐこともできます。

※生年月日を生年月まで丸める、名前ではなくIDで管理するなど。

①パブリッシュされたデータへのアクセスする際は、管理者であっても都度認証が求められる。
②ワークブックに認証情報を埋め込むと、他のユーザーもデータの中身を見ることができる。
(認証情報の埋め込みはパブリッシュ時に設定できる)

サービスアカウントを使ってBigQueryに接続

※ここでいうサービスアカウントとは、OAuth 2.0 を介してプログラムでAPIにアクセスするアカウントを指します。

・Tableau Serverのみ更新可(Tableau Online非対応)
・Tableau 公式サポート対象外

TableauとBigQueryの接続においてサービスアカウントを利用する場合「Simba *ODBC driver」または「Simba *JDBC driver」を利用します。

*ODBC=「Open Database Connectivity」, JDBC=「Java Database Connectivity」

◆ODBC:接続までの流れ

  1. 最新のSimba driverをダウンロード
  2. 手順に従いインストールを進め、BigQuery用のDNSを構築
  3. Tableauの接続画面から[ODBC]を選択し、先ほどのDNSを接続
  4. 完了

◆JDBC:接続までの流れ(概要

  1. Google Cloud Storage APIを有効化
  2. Storage APIの*利用料を確認
  3. Tableauと接続するGCPサービスアカウントを作成
  4. プライベートキー(jsonファイル)を発行
  5. Simba JDBC driverをインストール
  6. 全てのファイルを”bigquery_jdbc”配下へ抽出
  7. Java11+ 64bitがインストールされていることを確認
  8. tsmコマンドを使ってjava11をセッティング
  9. プライベートキーでログインするためのJDBCファイルを作成
  10. ファイルを”genericjdbc.properties”として\DataSources配下に保存
  11. Tableauの接続画面から[JDBC]を選択し、*URLと方言を指定
  12. 完了

※2021/1/18でのAPI利用料は、東京リージョンで「$0.023/GB(毎月10GBまで無料)」です。
※URL=「jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;」, 方言=「SQL92」

Appendix

少しでもパフォーマンスを上げるには?

Tableau公式ドキュメントの概略です。

  • BigQueryの「カスタマイズ属性」を指定する(bq-batch-tasks, bq-large-fetch-rowsなど)
  • レガシーSQLではなく「標準SQL」を使う

メモ

  • BigQueryは日本リージョンにも対応している
  • Desktopでは複数のGoogleアカウントでBigQueryに接続できる
  • Webでの操作やパブリッシュは1つのアカウントでしか使えない
  • http環境下ではTableauにブラウザからログインできない

References

Tableau Desktop と Web 作成のヘルプ: Google BigQuery
Google BigQuery & Tableau: ベストプラクティス
zulily’s top 10 tips for self-service analytics with Google BigQuery and Tableau
High Throughput Google BigQuery extracts with Simba JDBC driver