技術ブログ

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

/ 初心者向け

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

スプレッドシートのデータをBigQueryに自動転送!GASで叶えるデータ連携

こんにちは!GAS専門ブロガーの〇〇です。

「スプレッドシートに蓄積したデータを、より高度な分析ができるBigQueryに自動で連携させたい…」

そう思っていませんか?

今回ご紹介するのは、Google Apps Script (GAS) を使って、この面倒な手作業を自動化するテクニックです。GASを使えば、プログラミングの知識が少なくても、スプレッドシートとBigQueryを繋げることができます。初心者の方でも安心して取り組めるよう、丁寧に解説していきますので、ぜひ最後までお付き合いください!

なぜスプレッドシートとBigQueryを連携させるのか?

スプレッドシートは手軽にデータを管理・分析できる素晴らしいツールですが、データ量が増えたり、複雑な分析を行いたい場合には限界があります。

一方、BigQueryはGoogle Cloudが提供する、高速かつスケーラブルなデータウェアハウスです。大量のデータを高速に処理し、高度なSQLクエリを実行できます。

この二つを連携させることで、以下のようなメリットが得られます。

  • データ分析の深化: スプレッドシートのデータをBigQueryに取り込むことで、より複雑で大規模なデータ分析が可能になります。
  • 自動化による効率化: 手動でのデータ転送作業が不要になり、時間と労力を節約できます。
  • リアルタイムに近いデータ活用: 定期的な自動連携により、常に最新のデータを分析に活用できます。

BigQueryへのデータ転送の基本的な流れ

GASでスプレッドシートのデータをBigQueryに転送する基本的な流れは以下のようになります。

1. BigQueryデータセットとテーブルの準備: BigQueryでデータを格納するための「データセット」と、その中にデータを格納するための「テーブル」を作成します。

2. GASスクリプトの作成: スプレッドシートのデータを取得し、BigQueryに挿入するGASコードを記述します。

3. トリガーの設定: 指定した時間にGASスクリプトが自動実行されるように「トリガー」を設定します。

ステップ1:BigQueryデータセットとテーブルの準備

まず、BigQuery側でデータを格納する場所を準備しましょう。

1. Google Cloud Consoleにアクセス: Google Cloud Console にアクセスし、プロジェクトを選択します。

2. BigQueryを開く: ナビゲーションメニューから「BigQuery」を選択します。

3. データセットの作成: 左側のペインでプロジェクト名をクリックし、「データセットを作成」を選択します。データセットID(例: my_dataset)を入力し、ロケーションなどを設定して作成します。

4. テーブルの作成: 作成したデータセットを選択し、「テーブルを作成」をクリックします。ソースとして「空のテーブルを作成」を選択し、スキーマ(各列の名前とデータ型)を定義します。スプレッドシートの列構成に合わせて設定してください。

ステップ2:GASスクリプトの作成

次に、スプレッドシートのデータを取得してBigQueryに挿入するGASコードを作成します。

準備するもの

  • スプレッドシート: 転送したいデータが含まれるスプレッドシート。
  • BigQueryのプロジェクトID、データセットID、テーブルID: ステップ1で確認したもの。

GASコード例

function transferSpreadsheetToBigQuery() {
  // BigQueryの情報を設定
  const projectId = 'YOUR_PROJECT_ID'; // ご自身のプロジェクトIDに置き換えてください
  const datasetId = 'my_dataset';      // 作成したデータセットIDに置き換えてください
  const tableId = 'your_table_id';     // 作成したテーブルIDに置き換えてください

  // スプレッドシートの情報を設定
  const spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); // 現在開いているスプレッドシート
  const sheetName = 'Sheet1'; // データを取得したいシート名

  const ss = SpreadsheetApp.openById(spreadsheetId);
  const sheet = ss.getSheetByName(sheetName);

  // ヘッダー行を除いたデータを取得
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();

  if (values.length === 0) {
    Logger.log('スプレッドシートにデータがありません。');
    return;
  }

  // ヘッダー行を削除(BigQueryのスキーマに合わせるため)
  const header = values.shift();

  // BigQueryに挿入するデータ形式に整形
  // BigQueryのスキーマと値の順番が一致している必要があります
  const rowsToInsert = values.map(row => {
    // ここで必要に応じてデータ型の変換や整形を行います
    // 例: 日付文字列をBigQueryのDATE型として認識させるための処理など
    return row;
  });

  // BigQueryにデータを挿入
  // BigQuery API を直接叩く方法もありますが、ここでは BigQuery Service を利用します
  // 事前に Apps Script のプロジェクトで BigQuery Service を有効にする必要があります
  // [リソース] > [ライブラリ] で 'BigQuery' と検索し、最新版を追加してください
  const bqService = BigQuery.newBigQueryService();

  const resource = {
    rows: rowsToInsert.map(row => ({ values: row }))
  };

  try {
    const response = bqService.tabledata().insertAll(
      projectId,
      datasetId,
      tableId,
      resource
    );

    if (response.insertErrors) {
      Logger.log('エラーが発生しました: %s', JSON.stringify(response.insertErrors));
    } else {
      Logger.log('データ転送が完了しました。挿入された行数: %s', rowsToInsert.length);
    }
  } catch (e) {
    Logger.log('BigQueryへの挿入中にエラーが発生しました: %s', e.toString());
  }
}

スクリプトの実行とライブラリの追加:

1. スプレッドシートを開き、「拡張機能」 > 「Apps Script」を選択します。

2. 上記のコードをエディタに貼り付けます。

3. YOUR_PROJECT_ID をご自身のGoogle CloudプロジェクトIDに書き換えます。

4. datasetIdtableId も、ステップ1で作成したIDに書き換えます。

5. 重要:GASプロジェクトでBigQuery Serviceを利用できるように、ライブラリを追加します。「リソース」>「ライブラリ」を開き、「BigQuery」と入力して検索し、最新版(通常は ID Y_Y2_hT-fK4RzJ704_02p24d9r-23-0 のようなもの)を追加してください。

6. transferSpreadsheetToBigQuery 関数を選択し、実行ボタン(▶︎)をクリックします。

7. 初回実行時には、スクリプトの権限を承認する必要があります。指示に従って承認してください。

ステップ3:トリガーの設定(自動化)

GASスクリプトを定期的に自動実行させるには「トリガー」を設定します。

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

2. 右下にある「トリガーを追加」ボタンをクリックします。

3. 以下の設定を行います:

  • 実行する関数を選択: transferSpreadsheetToBigQuery を選択します。
  • 実行するデプロイを選択: Head を選択します。
  • イベントのソースを選択: 「時間駆動」を選択します。
  • 時間間隔のタイプを選択: 「日付ベースのタイマー」や「時間間隔タイマー」などを選択し、実行したい頻度(例: 毎日午前9時)を設定します。

4. 「保存」をクリックします。

これで、指定した時間にGASスクリプトが自動実行され、スプレッドシートのデータがBigQueryに転送されるようになります!

まとめ

今回は、Google Apps Script (GAS) を利用して、スプレッドシートのデータをBigQueryに自動転送する方法を解説しました。BigQueryの準備からGASコードの記述、そしてトリガーによる自動化まで、一連の流れを掴んでいただけたかと思います。

この自動連携を活用することで、データ活用の幅が大きく広がり、日々の業務効率も向上すること間違いなしです。ぜひ、ご自身のプロジェクトで試してみてください!

次回もお楽しみに!

GAS自動化の導入相談

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

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