TableauとGoogle BigQueryとの接続手順を解説!
目次
BigQueryとTableauを用いた構成
この記事では、Tableauとデータベースの接続、特にBigQueryとの接続について解説を行います。
データ分析環境として、昨今クラウド環境の導入が進んでいます。特に、分析用のDWHとしてBigQueryの利用も盛んです。今回の記事では、BigQueryをデータ分析環境の基盤とした場合のTableauの接続手順や設定のコツを記載します。
データ分析基盤の構成としては、下記のようにRDSなど本番DBG、BigQuery、Drive、Tableauという環境を想定します。
ここで行なっている処理は、本番環境から得られるデータをBigQueryに転送し、転送されたデータを用いて中間テーブルをBigQuery上に作成するという非常にシンプルなものです。Driveのデータとしては、スプレッドシートやエクセル、CSVなどが想定されます。これらのデータを定期的に利用するのであれば、BigQueryにテーブルとしてアップロードすることもあり得ます。一時的な利用であればダウンロードしてTableauに直接読み込むこともあります。
BigQueryへの接続手順
Tableau DesktopからBigQueryへの接続設定は非常に簡単です。
事前にBigQueryの請求アカウントを作成するなど、BigQueryのアカウント設定は完了させておきます。
Tableauにあるデータソースから、BigQueryを選択すると、アカウント認証の画面が表示されます。「許可」ボタンを押せば、BigQueryに接続されます。
BigQueryを利用する時のポイント
BigQueryのコストを抑えて使う方法
BigQueryは、クエリを実行するたびに課金される仕組みです。Tableau Desktopの画面でカラムを入れては除いてVizを更新するたびに、クエリが実行されてるようになっています。
ただし、分析においては探索的にカラムの入れ替えを行いながらインサイトを見つける方法が通常のやり方ですので、クエリの実行回数を気にしてカラムを操作できなくなってしまっては本末転倒です。
課金対策として最も有効な手段は、データの「抽出」を利用することです。Tableauをデータベースに接続すると「ライブ接続」がデフォルトになっています。ライブ接続は、あまり大きくないデータでかつ、刻一刻と変化するデータの場合に、利用するケースがありますが、基本的には「抽出」を使うことで対応できます。「抽出」設定にすると、ローカル環境にTableauの読取専用のデータが抽出されますので、カラムの入れ替えなどVizの操作を行なっても課金されることはなくなります。
「抽出」にもデメリットがあります。それは、あまりにも大きいデータの場合、ローカル環境に抽出することに時間を要したり、サイズの制約で保存できない場合も発生します。
その場合には、Vizにドラッグ&ドロップの度にBigQueryが実行されないように一時停止する設定を行います。TableauのViz画面の上部の一時停止マークを押すことで、設定が完了します。
課金対策の方法として、最も効果的なのは、そもそも参照するテーブルを必要な列や必要な粒度に事前に集計しておいたテーブルを利用することです。これによりデータのスキャン量も減りますので、課金額もさることながら、パフォーマンスも向上します。
例えば、ユーザのサーバへのリクエストログ(=行動データ)があった場合に、そのままの形式で、Tableauに読み込む必要があるのかは事前の分析設計の段階でよく考えると対応ができます。
日次のアクティブユーザ数、復帰ユーザ数、特定の操作を行なったユーザ数の時系列推移が知りたいというのであれば、日次の集計テーブルを事前に作成しておくようにします。
このようにすると、分析の粒度に応じて適切なテーブルを参照して高いパフォーマンスで分析を行うことができるようになります。
エラーを避けるテーブル作成
分析用のテーブルを作成する際に、スプレッドシートのデータを参照してテーブルを作成する場合があります。
スプレッドシートを参照したテーブルを作成すると、プレビューは表示されません。内容をみる場合には、select文を実行する必要があります。データの実態は、スプレッドシートにあり、クエリが投げられる度に、スプレッドシートの方を参照しに行く形になっています。
スプレッドシートから作成したテーブルを扱う場合、BigQueryコンソール上から参照するのであれば、問題ありません。しかし、Tableauからテーブルを参照すると「Access Denied: BigQuery BigQuery: Permission denied while getting Drive credentials.」というエラーメッセージが表示されます。この問題を解消するためには、スプレッドシート読み込みのテーブルを別テーブルに書き込みを行うことで解消することができます。
最もシンプルな方法は、同じカラム情報を持ったテーブルを用意した上で、下記のような定期実行クエリを動かすことです。例では、データセット名、テーブル名をsample_dataset、sample_tableとしています。また、スプレッドシートから設定したテーブルはsample_from_spreadsheetとしています。
定期実行の方法は、非常に簡単で、BigQueryのコンソール画面から、「スケジュール」から「スケジュールされたクエリを新規作成」から定期実行の内容を設定します。
このようにして作成したテーブルであれば、Tableauからも問題なく接続することができるようになります。
テーブルを参照する時の注意点
BigQueryのテーブルを複数参照して、結合を行いたい場合には、同一のプロジェクトに存在するテーブル同士の操作しかできてない点も注意するべき点です。
例えば、想定できるケースとしては、経営企画部門など管理部門が保有しているSalesForceからの転送データと、プロダクトチームが管理しているDBから得られるデータが別プロジェクトに保管されている場合などは注意が必要です。
対応方法としては、まずはデータ分析を行うためのプロジェクト、データセットは1ヶ所に決めてしまうことが重要です。分析データを一つのデータセットに集約することで、プロジェクトが異なることに起因するエラーを排除することができます。
この点は、当たり前と思われるかもしれませんが、分析用データの設計の時点で考えておかないと、色々なところに分析用データが保管される可能性もあるので、データアナリストが事前に考えておきたいポイントでもあります。
まとめ
TableauからBigQueryへの接続操作自体は、非常に簡単です。事前に、分析データについて「どのような粒度で分析が必要か」「データソースは同じプロジェクトに存在するか」などBigQueryのテーブルの設計が重要になってきます。
BigQueryを利用する際は、ぜひ分析用のテーブル設計を考えながら利用すると、Tableauでも高いパフォーマンスが得られるようになります。
<Tableau>
弊社ではSalesforceをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら
また、弊社ではTableauの導入支援のサポートも行っています。こちらもぜひお気軽にお問い合わせください。
>>Tableauについての詳細はこちら