- Google Apps Script( GAS ) から BigQuery を操作するにはどうすればいいのか知りたい
- GAS で BigQuery のテーブル定義書をスプレッドシートに出力したい
- GAS をスケジュール実行して、定期的にテーブル定義書を更新したい
Step1:BigQuery テーブルデータをスプレッドシートに出力
とりあえず、Google Apps Script を動かして、BigQuery のテーブルデータをスプレッドシートに出力してみたいと思います。
新しいスプレッドシートを開いたら、「ツール」タブから「スクリプトエディタ」をクリックします。

Apps Script 画面が開くので、「サービス」から「BigQuery API」を追加します。


エディタに以下のスクリプトを入力しました。
GASからBigQueryに対してクエリを実行する
GASからBigQueryに対してクエリを実行するサンプルコードは以下になります
function runQuery() {
// Replace this value with the project ID listed in the Google
// Cloud Platform project.
var projectId = '<プロジェクトID>';
var request = {
query: "SELECT * FROM <テーブル名> limit 10;",
useLegacySql: false
};
var queryResults = BigQuery.Jobs.query(request, projectId);
var jobId = queryResults.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
if (rows) {
var spreadsheet = SpreadsheetApp.create('BiqQuery Table Data');
var sheet = spreadsheet.getActiveSheet();
sheet.setName('pos_partition_date');
// Append the headers.
var headers = queryResults.schema.fields.map(function(field) {
return field.name;
});
sheet.appendRow(headers);
// Append the results.
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
sheet.getRange(2, 1, rows.length, headers.length).setValues(data);
Logger.log('Results spreadsheet created: %s',
spreadsheet.getUrl());
} else {
Logger.log('No rows returned.');
}
}
あとはこの関数なりをスケジューラーで定期実行すると読み書きの定期実行処理が可能になります。


コメント