技術ブログ

GASでスプレッドシートデータをBigQueryに自動転送!

/ 初心者向け

GASでスプレッドシートデータをBigQueryに自動転送!

スプレッドシートのデータをBigQueryに自動転送!GASで実現

Google スプレッドシートは、日常的に多くのデータを扱うのに非常に便利なツールです。しかし、データ分析や機械学習といった高度な用途に活用しようとすると、スプレッドシートだけでは限界があります。

そこで登場するのが、Google Cloud の強力なデータウェアハウスである BigQuery です。BigQuery を使えば、大量のデータを高速に分析したり、複雑なクエリを実行したりすることが可能になります。

でも、「スプレッドシートからBigQueryにデータを移すのって大変そう…」と思っていませんか?

実は、Google Apps Script (GAS) を使うことで、この作業を自動化し、非常に簡単に実現できるのです!

この記事では、GAS を使って Google スプレッドシートのデータを BigQuery に定期的に自動転送する方法を、初心者の方にも分かりやすく解説します。データ活用の幅を広げるための第一歩を、一緒に踏み出しましょう!

なぜスプレッドシートのデータをBigQueryに転送するのか?

スプレッドシートは手軽にデータを集計・管理できますが、以下のような課題があります。

  • データ量の限界: 大量のデータを扱うと、パフォーマンスが低下したり、機能に制限が出たりします。
  • 高度な分析の難しさ: 複雑な集計や機械学習モデルの適用など、高度な分析には向いていません。
  • リアルタイム性の課題: データが更新されても、それが分析に即座に反映されるわけではありません。

一方、BigQuery はこれらの課題を解決します。

  • スケーラビリティ: テラバイト、ペタバイト規模のデータも高速に処理できます。
  • 高度な分析機能: SQLによる柔軟なクエリ、機械学習機能(BigQuery ML)などが利用可能です。
  • リアルタイム分析: ストリーミングインサート機能などにより、ほぼリアルタイムでの分析も可能です。

スプレッドシートと BigQuery を連携させることで、手軽さと高度な分析能力の両立が実現できます。

準備するもの

  • Google アカウント
  • Google スプレッドシート (転送したいデータが入っているもの)
  • Google Cloud プロジェクト
  • BigQuery データセットとテーブル (データを格納する場所)

###GASでBigQueryにデータを転送する基本的な流れ

1. Google スプレッドシートからデータを取得する

2. BigQuery のクライアントライブラリを使って BigQuery に接続する

3. 取得したデータを BigQuery のテーブルに挿入する

4. GAS のトリガー機能を使って、この処理を定期的に実行する

1. BigQuery のセットアップ

まず、BigQuery 側でデータを格納する場所(データセットとテーブル)を作成する必要があります。BigQuery のコンソールから、新規データセットを作成し、その中にテーブルを作成してください。テーブルのスキーマ(列名とデータ型)は、スプレッドシートの列構成に合わせて定義します。

2. GAS スクリプトの作成

次に、Google スプレッドシートを開き、「拡張機能」>「Apps Script」からスクリプトエディタを開きます。

以下のコードは、スプレッドシートの特定のシートからデータを取得し、BigQuery に挿入する基本的な例です。

function exportSheetToBigQuery() {
  // ★★★ 設定項目 ★★★
  const spreadsheetId = 'YOUR_SPREADSHEET_ID'; // 転送したいスプレッドシートのID
  const sheetName = 'Sheet1'; // 転送したいシート名
  const datasetId = 'YOUR_DATASET_ID'; // BigQueryのデータセットID
  const tableId = 'YOUR_TABLE_ID'; // BigQueryのテーブルID

  // ★★★ サービスオブジェクトの取得 ★★★
  const ss = SpreadsheetApp.openById(spreadsheetId);
  const sheet = ss.getSheetByName(sheetName);
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  // ヘッダー行をスキップする場合(最初の行がヘッダーの場合)
  const rows = values.slice(1);

  // BigQuery クライアントの初期化
  // BigQuery API を有効にし、サービスアカウントキーを設定する必要があります。
  // ここでは簡易的な挿入方法を示します。
  // より堅牢な方法としては、BigQuery API の load メソッドを使用します。
  // Load メソッドを使用するには、サービスアカウントキーの設定や、
  // G Suite Domain-Wide Delegation の設定などが必要になります。

  // 簡易挿入(推奨ではありません。大量データや高頻度転送には不向きです。)
  // 実際には、load メソッドを使ったバッチ処理を推奨します。
  // load メソッドの例は、GAS のドキュメントや BigQuery の公式ドキュメントを参照してください。

  // ここでは、rows を BigQuery のテーブルに挿入する処理を記述します。
  // BigQuery API v2 の Tabledata.insertAll メソッドを使用する例(要設定)
  // 以下のコードは擬似コードであり、実際には BigQuery API への詳細なリクエストが必要です。
  // 実際には、UrlFetchApp.fetch() などを使って BigQuery API を叩くか、
  // BigQuery の公式ライブラリ (Apps Script BigQuery library など) を利用します。

  Logger.log('データ挿入処理を開始します...');

  // 実際の BigQuery への挿入処理は、以下のようになります(概念図)。
  // BigQuery API v2 を使用する場合、認証情報(サービスアカウントキーなど)が必要です。
  /*
  const projectId = 'YOUR_GCP_PROJECT_ID';
  const serviceAccountEmail = 'YOUR_SERVICE_ACCOUNT_EMAIL';
  const privateKey = 'YOUR_PRIVATE_KEY';

  const authClient = BigQuery.newAuthClient(serviceAccountEmail, privateKey);
  const bigquery = BigQuery.newClient(authClient);

  const tableRef = bigquery.dataset(datasetId).table(tableId);
  const insertRows = rows.map(row => {
    // スプレッドシートの列順と BigQuery のテーブルスキーマが一致している必要があります。
    // ここで、各行のデータを BigQuery のスキーマに合わせて整形します。
    return {
      insertId: Utilities.getUuid(), // 一意のIDを付与
      json: {
        column1: row[0], // スプレッドシートの1列目 -> BigQuery の column1
        column2: row[1], // スプレッドシートの2列目 -> BigQuery の column2
        // ... 以下、スプレッドシートの列数に合わせて定義
      }
    };
  });

  try {
    const response = tableRef.insert(insertRows);
    if (response.insertErrors) {
      Logger.log('挿入エラーが発生しました:', response.insertErrors);
    } else {
      Logger.log(insertRows.length + ' 件のデータを正常に挿入しました。');
    }
  } catch (e) {
    Logger.log('BigQuery 挿入中にエラーが発生しました: ' + e);
  }
  */

  Logger.log('データ挿入処理が完了しました。');
}

注意点: 上記コードは概念的なもので、実際の BigQuery へのデータ挿入には、Google Cloud プロジェクトの設定、サービスアカウントの作成とキーの取得、そして BigQuery API への認証が必要です。GAS から BigQuery を操作するためのライブラリ(BigQuery サービスなど)や、UrlFetchApp を使って直接 BigQuery API を叩く方法があります。

3. トリガーの設定

作成したGASスクリプトを定期的に実行するために、トリガーを設定します。スクリプトエディタの左側にある時計アイコン(トリガー)をクリックし、「トリガーを追加」を選択します。

  • 実行する関数を選択: exportSheetToBigQuery を選択します。
  • 実行するデプロイを選択: 「ヘッド」を選択します。
  • イベントのソースを選択: 「時間主導型」を選択します。
  • 時間の間隔を選択: 「時間間隔」で、例えば「1時間ごと」「毎日午前0時」など、希望する実行間隔を設定します。

これで、設定した間隔で自動的にスプレッドシートのデータが BigQuery に転送されるようになります。

まとめ

Google Apps Script を活用することで、Google スプレッドシートのデータを BigQuery に自動で、かつ効率的に転送することができます。これにより、手作業によるデータ移行の手間が省け、より高度なデータ分析や活用への道が開かれます。

まずは簡単なデータセットから試してみて、GAS と BigQuery の連携に慣れていきましょう。データ活用の可能性は、あなたの想像以上に広がります!

Happy Scripting!

GAS自動化の導入相談

請求書PDF作成、Gmail自動送信、Slack通知、スプレッドシート連携などを業務に合わせて実装できます。

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