こんにちは、ピリカ開発の冨田です。
今日は、BigQueryのデータを定期的にGooleスプレッドシートに出力する方法について書きたいと思います。
今回使用するツールはOWOX BI BIgQuery Reportsという無料のアドオンツールです。
というのも、GoogleのConnectedSheetを使用すれば、同様のことは可能なのですが、使用できる条件が、合わなかったので他の方法を探しました。
概要
OWOX BI BIgQuery Reportsというツールを使って、BigQueryからGoogleスプレッドシートに出力する方法をご紹介します。
使用するツール
OWOXのOWOX BI BIgQuery Reportsというサービスです。
BigQueryを直接スプレッドシートに出力できるものです。
OWOXはOWOX BIというデータ可視化ツールを提供されています。
OWOXが別途無料で公開しているツールがOWOX BI BIgQuery Reportsのようです。
BigQueryのクエリの課金以外は、無料で利用することができます。
使用できる条件
- GoogleWorkPlaceを利用できること
設定の流れ
OWOX BI BIgQuery Reportsをインストールする
OWOX BI BIgQuery Reportsを使ってスプレッドシートからBigQueryのクエリを実行できるようにする
定期的に2を実行するように設定する
1. OWOX BI BIgQuery Reportsをインストールする
Googleのマーケットプレイスからインストールできます。
2. OWOX BI BIgQuery Reportsを使ってスプレッドシートからBigQueryのクエリを実行できるようにする
2-1. 出力先のスプレッドシートを開く。
2-2. 「アドオン」タブ → 「OWOX BI BIgQuery Reports」 → 「Add a new Report」を押す。
これで右側に「Add & Run a new report」というウィンドウが立ち上がります。
2-3. BigQueryの設定をする。
「Select Google BigQuery project」は、GoogleCloudPlatformのプロジェクト名を、
「Select a query」で、「+ Add new query」を選択します。
2-4. クエリを書いて保存する。
「Add a new query」というウィンドウが開くので、ここに実行したいクエリを書き、「Save&Run」もしくは「Save」するだけです。
これらの、クエリの設定は、スプレッドシートの1シートごとに設定できます。
3. 定期的に2を実行するように設定する
定期実行の設定は、同じく「アドオン」タブから行えます。
3-1. 「アドオン」タブ → 「OWOX BI BIgQuery Reports」 → 「Schedule Reports」を押す。
成功時や失敗時にメールで通知を受け取ることもできます。
おまけ. 他のスプレッドシートにコピーする
このスプレッドシートを他の人と共有したかったのですが、 クエリが叩けてしまうスプレッドシートを共有するのは抵抗がありました。
そこでスプレッドシートにGASを書いて、別スプレッドシートに丸々コピー、それを共有することにしました。
const TO_SPREAD_SHEET_KEY = '<TO SPREAD SHEET KEY>'; const TO_SPREAD_SHEET_NAME = '<TO SPREAD SHEET NAME>'; const FROM_PREAD_SHEET_NAME = '<FROM SPREAD SHEET NAME>'; function copyToSpreadSheet() { const toSpreadSheet = SpreadsheetApp.openById(TO_SPREAD_SHEET_KEY).getSheetByName(TO_SPREAD_SHEET_NAME); const currentSpreadSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(FROM_PREAD_SHEET_NAME); let column = currentSpreadSheet.getLastColumn(); let raw = currentSpreadSheet.getLastRow(); let values = currentSpreadSheet.getRange(1, 1, raw, column).getValues(); toSpreadSheet.getRange(1, 1, raw, column).setValues(values); }
ここまで読んでくださってありがとうございました!