BigQueryをDesktopに接続
接続手順
- [データソース]から「Google BigQuery」を選択
- Googleアカウントでログイン
- プロジェクト / データセット / テーブル選択
- ビューにテーブルをドラッグ&ドロップ
接続方法「ライブ vs 抽出」
◆ライブ接続
ライブ接続では、BigQueryの持ち味である「大規模データの高速処理」を実現することができます。
ビューを構築する際のクエリはデータベース側で発行され、集計されたデータがTableauに取り込まれます。
ただ、BigQueryはクエリの都度課金システムなので「Tableauで何かしらの操作(ディメンション配置、絞り込みなど)を行うと課金されてしまう」という点に注意してください。
そこで課金額を抑えコスパ良くビューを構築するテクニックとして、以下の3点が挙げられます。
- データソース / コンテキストフィルターでレコード数を絞る
- ビュー構築中は自動更新をOFFにする
- 最初にフィルターを追加する
※自動更新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とBigQueryの接続においてサービスアカウントを利用する場合 Simba *ODBC driver または Simba *JDBC driver を利用します。
*ODBC=「Open Database Connectivity」, JDBC=「Java Database Connectivity」
◆ODBC:接続までの流れ
◆JDBC:接続までの流れ(概要)
- Google Cloud Storage APIを有効化
- Storage APIの*利用料を確認
- Tableauと接続するGCPサービスアカウントを作成
- プライベートキー(jsonファイル)を発行
- Simba JDBC driverをインストール
- 全てのファイルを”bigquery_jdbc”配下へ抽出
- Java11+ 64bitがインストールされていることを確認
- tsmコマンドを使ってjava11をセッティング
- プライベートキーでログインするためのJDBCファイルを作成
- ファイルを”genericjdbc.properties”として\DataSources配下に保存
- Tableauの接続画面から[JDBC]を選択し、*URLと方言を指定
- 完了
※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