GASでスプレッドシートをBigQueryへ自動連携!
/ 初心者向け
スプレッドシートのデータをBigQueryに自動転送!GASで実現するデータ連携
こんにちは!Google Apps Script (GAS) 専門ブロガーの〇〇(あなたの名前)です。
日々の業務でスプレッドシートに蓄積されるデータ、そのまま眠らせておくのはもったいないですよね?もし、そのデータをより強力な分析基盤であるBigQueryに自動で連携できたら、ビジネスの可能性はぐっと広がるはずです。
今回は、そんな夢のような連携をGASを使って実現する方法を、初心者の方にも分かりやすく解説していきます。コード例も豊富にご用意しましたので、ぜひ最後までお付き合いください!
なぜスプレッドシートとBigQueryを連携させるのか?
まず、なぜわざわざGASを使ってスプレッドシートのデータをBigQueryに連携させるのか、そのメリットを整理しておきましょう。
- 高度な分析: BigQueryは、大量のデータを高速に処理・分析するのに特化しています。スプレッドシートだけでは難しい複雑な集計や分析が可能になります。
- データの一元管理: 複数のスプレッドシートのデータをBigQueryに集約することで、データの一元管理が容易になり、データの整合性を保ちやすくなります。
- 自動化による効率化: GASを使えば、手作業でのデータ転送は一切不要に。定期的に自動でデータが更新されるため、業務効率が劇的に向上します。
- 他のGoogleサービスとの連携: BigQueryはGoogle Cloud Platform (GCP) の一部であり、Looker Studio (旧Googleデータポータル) など他のサービスとの連携も強力です。
GASとBigQuery連携の全体像
GASからBigQueryへデータを転送する基本的な流れは以下のようになります。
1. GASプロジェクトの作成: Googleドライブ上に新しいGASプロジェクトを作成します。
2. スプレッドシートの準備: 連携したいデータが含まれるスプレッドシートを用意します。
3. BigQueryデータセットとテーブルの作成: BigQuery上にデータを格納するためのデータセットとテーブルを作成します。
4. GASスクリプトの記述: スプレッドシートからデータを取得し、BigQueryに挿入するGASコードを記述します。
5. トリガーの設定:GASスクリプトを定期的に実行するためのトリガーを設定します(例:毎日午前3時に実行)。
実践!GASスクリプトでデータを転送する
それでは、実際にGASスクリプトを書いてみましょう。今回は、簡単な例として、スプレッドシートの特定のシートからデータを取得し、BigQueryのテーブルに挿入するスクリプトを作成します。
1. BigQueryの準備
まず、BigQuery側でデータセットとテーブルを作成する必要があります。これは、BigQueryのコンソールからGUI操作で行うのが簡単です。
- データセットの作成: プロジェクトを選択し、「データセットを作成」から任意の名前(例:
my_dataset)で作成します。 - テーブルの作成: 作成したデータセットを選択し、「テーブルを作成」から以下の設定を行います。
- ソース: 「空のテーブルを作成」を選択。
- スキーマ: スプレッドシートの列名とデータ型に合わせて定義します。例えば、スプレッドシートの1行目がヘッダーで、A列が
name(STRING)、B列がvalue(INTEGER)なら、以下のように定義します。
[
{"name": "name", "type": "STRING"},
{"name": "value", "type": "INTEGER"}
]
- パーティション分割とクラスタリング: 必要に応じて設定しますが、最初は省略しても構いません。
2. GASスクリプトの記述
次に、GASエディタを開き、以下のコードを記述します。
function exportSheetToBigQuery() {
// 1. 設定情報
const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID'; // 対象のスプレッドシートID
const SHEET_NAME = 'Sheet1'; // 対象のシート名
const DATASET_ID = 'my_dataset'; // BigQueryのデータセットID
const TABLE_ID = 'my_table'; // BigQueryのテーブルID (スキーマ定義したもの)
// 2. スプレッドシートからデータを取得
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const range = sheet.getDataRange();
const values = range.getValues();
// ヘッダー行をスキップする場合
const data = values.slice(1);
// 3. BigQueryにデータを挿入
// BigQuery API を使用するために、`BigQuery` という名前のサービスにアクセスできる必要があります。
// 初めて利用する場合は、`サービス` -> `BigQuery` を選択し、追加してください。
const bigquery = BigQuery;
const rows = data.map(row => {
// BigQueryのスキーマに合わせてデータを整形します。
// 例: value列がINTEGER型の場合、数値に変換
return {
"name": row[0], // A列
"value": parseInt(row[1], 10) // B列
};
});
// BigQueryのテーブルにデータを挿入
// insertRows メソッドは、複数行を一度に挿入できます。
bigquery.getTable(DATASET_ID, TABLE_ID).insertRows(rows);
Logger.log('データがBigQueryに正常に挿入されました。');
}
コードの解説:
YOUR_SPREADSHEET_IDの部分は、あなたのスプレッドシートのIDに置き換えてください。SHEET_NAMEは、データを取得したいシートの名前に合わせてください。DATASET_IDとTABLE_IDは、BigQueryで作成したIDに置き換えてください。data.map()の部分で、スプレッドシートから取得したデータをBigQueryのスキーマに合わせて整形しています。ここの処理は、あなたのスプレッドシートの構造やBigQueryのテーブルスキーマに合わせて適宜変更してください。BigQueryサービスへのアクセス許可を求めるメッセージが表示されたら、許可してください。
3. トリガーの設定
GASスクリプトを定期的に実行するために、トリガーを設定します。
1. GASエディタの左側にある時計アイコン(トリガー)をクリックします。
2. 右下にある「トリガーを追加」ボタンをクリックします。
3. 以下の設定を行います。
- 実行する関数を選択:
exportSheetToBigQueryを選択。 - 実行するデプロイを選択:
Headを選択。 - イベントのソースを選択: 「時間駆動型」を選択。
- エラー通知設定: 任意で設定。
- 時間間隔のタイプを選択: 「特定の日時」または「毎時」などを選択し、実行したい頻度(例:毎日午前3時)を設定します。
4. 「保存」ボタンをクリックします。
これで、設定した時間にGASスクリプトが自動実行され、スプレッドシートのデータがBigQueryに転送されるようになります。
まとめ
今回は、Google Apps Script (GAS) を使って、スプレッドシートのデータをBigQueryに自動転送する方法を解説しました。この自動化により、データ分析の効率が飛躍的に向上し、より迅速で的確な意思決定が可能になります。
最初は少し戸惑うかもしれませんが、一度設定してしまえば、あとは自動で運用してくれるので非常に便利です。
ぜひ、あなたの業務でもこのGASとBigQueryの連携を活用してみてください!
次回は、より高度なデータ処理やエラーハンドリングについてもお話しできればと思います。お楽しみに!
GAS自動化の導入相談
請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。