【Tableau】Google BigQueryとの連携
2024.9.19
今回はTableauでBigQueryのデータへ接続する方法と、いくつかの活用ポイントをお伝えしていきます。
目次
はじめに
Google BigQuery(ビッグクエリ)とは?
BigQueryは「Google Cloud Platform(通称:GCP)」が提供するクラウド型のデータウェアハウスサービスです。
BigQueryの最大の特徴は、やはりビッグデータを超超超高速で処理できるという点です。数TBや数PBに及ぶ大量のデータを数十秒で処理します。データサイエンス分野が需要を伸ばしている中で、高速で解析処理が実行できる必須のツールとして知られています。
Tableau(タブロー)とは?
Tableauは世界的に高く評価されているBIツールの1つで、データを分かりやすく視覚化するためのツールです。
詳しくはこちらの記事でも紹介しています。
TableauとBigQueryの接続方法
ではTableau Desktopを使って、実際にBigQueryのデータに接続する方法をざっくりとご紹介します。接続方法はとても簡単です。
Tableau Desktopを開くとまずデータ接続画面が表示されるので、ここで「Google BigQuery」を選択後、Google BigQueryの認証画面を通ると接続ができます。
Google BigQueryとの接続が完了すると、データソース画面で必要なテーブルをドラッグ&ドロップするだけで目的のデータソースと繋ぐことができます。
データソース接続後、シートへ移動すると、しっかりと目的のデータが取り込まれていることが確認できます。
ここでもドラッグ&ドロップの簡単な操作で、目的に添ったビジュアライズを作成することができます。
費用削減とパフォーマンス向上のための工夫
BigQueryの利用料金については、導入している組織ごとに契約している料金プランが異なるかとは思いますが、従量課金(クエリが処理したデータ量に応じた課金)を気にする必要がある場合、もちろんTableauと接続して利用する場合にもコストを抑えることを意識しながら利用する必要があります。
またデータ処理速度に関しても、いくらBigQueryとTableauの処理能力が優れているとは言っても、大量のデータを扱う場合にはそれなりに処理時間がかかります。
BigQueryのコスト削減と処理パフォーマンス向上の、双方の面を考慮した有効な方法がいくつかあるので紹介していきます。(※実現したい目的、用途によっては適応しないものもあります)
Tableauに接続する前にBigQueryで前処理をしておく
実際の現場でTableauとBigQueryを連携して利用する場合、BigQuery側で事前に読み込みデータ(いわゆるデータマート)を作成しておくことが多いかと思います。
最終的にTableauで処理を行いたい、必要となるデータのみの抽出・集計の過程を、事前にBigQuery内で(もしくはデータ加工ツールなど使って)実行しておくことで、Tableau側は軽量なデータだけを取り扱うことになるため処理パフォーマンスが上がり、BigQueryへ読み込むコストも抑えることができます。
接続方法を「ライブ」から「抽出」に変更する
Tableauのデータ接続方法には「ライブ接続」と「抽出」の2種類があり、それぞれ以下の通りです。
ライブ接続 | 参照元のデータ(BQの場合はサーバー)に都度アクセスし、リアルタイムのデータを表示する |
抽出 | 抽出実行時点のデータのスナップショット。データを圧縮してローカルに切り出し、抽出後からはローカルファイルへアクセスする |
デフォルトでは「ライブ」接続になっており、こちらは常に最新のデータを参照できるメリットはありますが、データが意図しないタイミングや頻度で更新される可能性があり、処理の負荷が高く、余計なコストがかかってしまう場合があります。
常にリアルタイムで数値を反映させる必要のない場合、接続方法を「抽出」に変更することをおすすめします。
パフォーマンスログを取得して遅いクエリを特定する
ダッシュボードの表示に時間がかかる場合などで、パフォーマンスログを取得してどの処理に時間がかかっているのかを調査することができます。
遅いクエリを正確に特定し、そのデータモデルを見直すことでワークブックの改善に役立てることができます。
コンテキストフィルターを活用する
容量の大きいデータを扱っている場合かつ、複数のフィルターを設定する必要がある場合は、コンテキストフィルターを活用することでパフォーマンスを高められる場合があります。
通常フィルターは全行にアクセスするためデータ量が多いとパフォーマンス悪化の原因になりますが、コンテキストフィルターは通常フィルタよりも先に処理されるため、他の通常フィルタがアクセスする行数を減らすことができます。
詳細な説明と利用方法は割愛しますが、全ての場合に対応できる訳ではなく「フィルターを利用したことで処理が重くなった」という場合には活用を検討してみてもよいかもしれません。
自動更新をオフにする
デフォルトでは、Tableauのシート上でデータを配置した際など、都度自動的にクエリが実行されてビューが作成されるようになっています。
そのため、複雑なビューを作成する場合やデータ量が大きい場合、毎回クエリの処理に時間がかかりなかなかビューが表示されないということが多々あります。
ビューの構築中はクエリの自動更新をオフにし、結果を確認したいタイミングで再度オンにするとよいでしょう。
おわりに
パフォーマンス改善策をいくつかご紹介させていただきましたが、動作の軽量さと分析の柔軟さはトレードオフの関係になっているとも言えます。
探索的な分析では柔軟さを優先し、短時間で値を確認する必要のあるダッシュボードなどではパフォーマンスを優先するなど、目的や用途に応じて使い分けられると良いと思います。
システム開発・保守、導入支援など、
お気軽にご相談ください