技術ブログ

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

/ 初心者向け

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

Google Apps Script (GAS) でスプレッドシートのデータをBigQueryに自動転送する方法

「スプレッドシートに日々蓄積されるデータを、より高度な分析のためにBigQueryへ移したい…でも、手作業は大変だし、GASでできるのか不安…」

そんなあなたのために、この記事ではGoogle Apps Script (GAS) を使って、Google スプレッドシートのデータをBigQueryに自動で転送する方法を、初心者の方でも理解できるように丁寧に解説します。

なぜスプレッドシートからBigQueryへ?

Google スプレッドシートは、手軽にデータを管理・共有できる強力なツールです。しかし、データ量が膨大になると、検索や集計に時間がかかったり、分析機能に限界を感じたりすることがあります。

一方、BigQueryはGoogle Cloud Platform (GCP) が提供する、フルマネージドなデータウェアハウスです。大量のデータを高速に処理・分析する能力に長けており、より複雑で高度なデータ分析を可能にします。

  • スプレッドシート: 日々の記録、小規模なデータ管理
  • BigQuery: 大規模データ分析、機械学習、BIツール連携

この2つを連携させることで、スプレッドシートの気軽さとBigQueryの分析力を両立させることができるのです。

GASで自動化するメリット

GASを使うことで、以下のメリットが得られます。

  • 自動化: 手作業による転送の手間が省け、ヒューマンエラーも削減できます。
  • リアルタイム性: 定期的な実行設定により、常に最新のデータをBigQueryに反映させられます。
  • コスト削減: 外部ツールやサービスに依存せず、無料で実現できます。

準備するもの

1. Google アカウント: Gmailなどで使用しているアカウントでOKです。

2. Google スプレッドシート: 転送したいデータが含まれているもの。

3. Google Cloud Platform (GCP) プロジェクト: BigQueryを使用するために必要です。まだ作成していない場合は、Google Cloud Console から作成してください。

4. BigQuery データセットとテーブル: データを格納するための場所をBigQuery上に作成します。テーブルのスキーマ(列名とデータ型)をスプレッドシートの列構成に合わせて定義しておきましょう。

GASスクリプトの作成手順

1. GASエディタを開く

転送したいスプレッドシートを開き、「拡張機能」→「Apps Script」を選択します。

2. BigQuery APIの有効化

GASエディタの画面左側にある「+」アイコン(サービス)をクリックし、「BigQuery API」を選択して追加します。これにより、GASからBigQueryを操作できるようになります。

3. スクリプトの記述

以下のサンプルコードを参考に、GASエディタに貼り付けてください。

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

  var ss = SpreadsheetApp.openById(spreadsheetId);
  var sheet = ss.getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues(); // シートの全データを取得

  // ヘッダー行を除外する場合 (1行目がヘッダーと仮定)
  data.shift();

  // BigQueryにデータを挿入
  try {
    var result = Bigquery.Jobs.insert({
      configuration: {
        load: {
          sourceUris: [], // CSV形式で一時的に保存して読み込ませる
          destinationTable: {
            projectId: Bigquery.Projects.getDefault().id,
            datasetId: dataSetId,
            tableId: tableId
          },
          sourceFormat: 'CSV',
          writeDisposition: 'WRITE_APPEND', // 追記モード
          autodetect: false // スキーマを定義している場合はfalse
        }
      }
    });
    
    // シートのデータをCSV形式で一時ファイルに保存
    var csvData = data.map(row => row.map(cell => `"${cell.toString().replace(/"/g, '""')}"`).join(',')).join('\n');
    var blob = Utilities.newBlob(csvData, MimeType.CSV, 'data.csv');
    var file = DriveApp.createFile(blob);

    // BigQueryのロードジョブを実行
    Bigquery.Jobs.insert({
      configuration: {
        load: {
          sourceUris: [file.getAs(MimeType.CSV).getBlob().copyBlob().getCloudStorageUri()], // 一時ファイルのURI
          destinationTable: {
            projectId: Bigquery.Projects.getDefault().id,
            datasetId: dataSetId,
            tableId: tableId
          },
          sourceFormat: 'CSV',
          writeDisposition: 'WRITE_APPEND', // 追記モード
          autodetect: false // スキーマを定義している場合はfalse
        }
      }
    });
    
    // 一時ファイルを削除
    file.setTrashed(true);
    
    Logger.log('データがBigQueryに正常に転送されました。');

  } catch (e) {
    Logger.log('データ転送中にエラーが発生しました: ' + e);
  }
}

コードの説明:

  • YOUR_SPREADSHEET_ID, YOUR_DATASET_ID, YOUR_TABLE_ID は、ご自身の環境に合わせて書き換えてください。
  • SpreadsheetApp.openById() でスプレッドシートを開きます。
  • getSheetByName() でシートを指定します。
  • getDataRange().getValues() でシートの全データを配列として取得します。
  • data.shift() は、1行目をヘッダーとして扱い、データとして転送しない場合にコメントアウトを外してください。
  • BigQueryのロードジョブを設定し、CSV形式で一時ファイルを作成して転送します。
  • writeDisposition: 'WRITE_APPEND' は、既存のデータに追記する場合の指定です。上書きしたい場合は 'WRITE_TRUNCATE' に変更します。

4. スクリプトの実行と権限の承認

GASエディタのツールバーにある実行ボタン(▶︎)をクリックします。

初めて実行する際は、スクリプトがGoogleアカウントやBigQuery、Google Driveにアクセスするための権限を求められます。「権限を承認」をクリックし、画面の指示に従って承認してください。

5. トリガーの設定(自動実行)

GASエディタの左側にある時計アイコン(トリガー)をクリックします。

  • 「トリガーを追加」ボタンをクリックします。
  • 「実行する関数を選択」で exportSheetToBigQuery を選択します。
  • 「実行するデプロイを選択」で「ヘッド」を選択します。
  • 「イベントのソースを選択」で、「時間主導型」を選択します。
  • 「時間間隔を選択」で、実行したい頻度(例: 1時間ごと、毎日午前0時など)を設定します。

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

まとめ

Google Apps Script (GAS) を活用することで、スプレッドシートのデータをBigQueryに自動で転送し、より高度なデータ分析への道を切り拓くことができます。最初は少し難しく感じるかもしれませんが、この手順を一つずつ試していけば、きっと実現できるはずです。

ぜひ、GASを使ったデータ活用の第一歩を踏み出してみてください!

---

GAS自動化の導入相談

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

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