Google Apps ScriptでBigQueryを実行してみる
BigQueryでSQLを実行した結果をシートに吐き出したいみたいなことは割とよくありますよね。実際に最近扱った案件でも何回かありましたんで、自分への備忘がてら記事に残すとする。
GASでBigQueryを実行する
Google Apps ScriptでBigQueryを実行する方法はググれば山のように出てきます。わざわざここで書く必要はない気もするけど、念の為。
①GAS画面の左側ツールバー「サービス」からBigQueryを追加
なんてことはないですね。これを登録するだけでBigQueryが使えるようになります。
②バージョンは最新のものを選ぶ
Google Apps Scriptの設定
汎用性を高めるためにクラスにしてみた。
たぶんコピペで割とどこでも使えるはず。以下、GASコード。
/**
* BigQueryAPIの実行
* @constructor
* - project_code : GCPのプロジェクト名
* - query : 実行するSQL
* - result : BigQueryAPIのレスポンス結果(オブジェクト)
*/
class Bigquery {
constructor (sql) {
this.project_code = 'gcp_project_code';
this.query = sql;
this.result = this.execQuery();
}
/**
* BigQueryAPIの実行
* @return {object} - BigQueryAPIの結果(Object)
*/
//location入れる
execQuery () {
const resource = {
query : this.query,
timeoutMs: 1200000,
useLegacySql: false,
location: 'US'
};
return BigQuery.Jobs.query(resource, this.project_code);
}
/**
* BigQueryの実行結果を配列に変換
* @return {array} - 二次元配列
*/
getQueryResultArray() {
const resultCount = this.result.getTotalRows();
const resultValues = new Array(parseInt(resultCount));
const tableRows = this.result.getRows();
for (let i = 0; i < resultCount; i++) {
let cols = tableRows[i].getF();
resultValues[i] = new Array(cols.length);
for (let j = 0; j < cols.length; j++) {
resultValues[i][j] = cols[j].getV();
}
}
console.log('BigQueryData:', resultValues)
return resultValues;
}
}
このクラスの使い方
①SQLの作成(たとえばこんな感じ)
const sql = `
select name, phone_number, address
from \`data.user_info\`
where date between '2023-03-01' AND '2023-03-31'
`
②Classの呼び出し
//引数に①で定義したSQLを渡す
const bigquery = new Bigquery(sql);
③クエリの実行結果を取得
//key[result]で結果を取得
const sqlResult = bigquery.result;
console.log(sqlResult);
使い方は以上。
あとはGAS上で煮るなり焼くなり好きにできます。シートに書き出すも良し、CSVファイルにしてどっかに保存するも良し、メールなりSlackなりで通知するも良し。
GAS上でSQL実行する分には割とシンプルにできて便利でしたね。
(まぁ。SQLを書くのが慣れないとむずいんですがね。。。がんばろ。)
この記事が気に入ったらサポートをしてみませんか?