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での読み込みも速くなる」ので、まさに一石二鳥です。

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

そんなときは「分析で本当に必要なデータは何か」を自問し、*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