技術ブログ

GASでスプレッドシートをBigQueryへ自動連携!

/ 初心者向け

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_IDTABLE_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通知、スプレッドシート連携などを業務に合わせて実装できます。

請求書自動生成ツールを見る / SNS自動投稿ツールを見る