1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS】getDataSourceTables()でBigQueryデータソース表を取得・更新する方法

【GAS】getDataSourceTables()でBigQueryデータソース表を取得・更新する方法

【GAS】getDataSourceTables()でBigQueryデータソース表を取得・更新する方法

Googleスプレッドシートの「接続されたシート」機能は、BigQueryなどの外部データを直接扱える強力な機能ですが、そのデータ更新を自動化したいと考えたことはありませんか? getDataSourceTables()は、このデータソースとの連携をGoogle Apps Script (GAS)から制御するための専門的なメソッドです。

この記事では、getDataSourceTables()を使ってデータソース表を取得し、そのデータをプログラムで更新・管理する方法を解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getDataSourceTables()とは?

getDataSourceTables()は、特定のシートに存在するデータソース表DataSourceTableオブジェクト)を配列として取得するメソッドです。

データソース表は、見た目は通常のセル範囲ですが、内部にはBigQueryへの接続情報やクエリ、更新状態などを持つ特殊なオブジェクトです。このメソッドを使うことで、GASからこれらのデータソース表にアクセスし、操作することが可能になります。

function findDataSourceTables() {
  const sheet = SpreadsheetApp.getActiveSheet();
  
  // シート内の全てのデータソース表を取得
  const dataSourceTables = sheet.getDataSourceTables();

  if (dataSourceTables.length > 0) {
    console.log(`このシートには ${dataSourceTables.length} 個のデータソース表があります。`);
  } else {
    console.log("このシートにデータソース表はありません。");
  }
}

データの更新を自動化する

データソース表の最も一般的な操作は、データの更新です。これにはrefreshData()waitForCompletion()の2つのメソッドが鍵となります。

refreshData()forceRefreshData()

  • refreshData(): データソースの更新を開始します。更新処理はバックグラウンドで非同期に行われます。
  • forceRefreshData(): エラーが発生している状態でも強制的に更新を開始します。

waitForCompletion(timeoutInSeconds)

refreshData()は処理の完了を待たないため、更新が終わるまで待機したい場合はwaitForCompletion()を使います。

  • timeoutInSeconds: タイムアウトまでの秒数を指定します(最大300秒)。指定した時間内に更新が完了しない場合、スクリプトはエラーをスローします。

実践例:データソースを定期的に更新する

以下のスクリプトは、特定のスプレッドシートに含まれる全てのデータソース表を強制的に更新します。この関数をトリガーで定期実行すれば、データの鮮度を自動で保つことができます。

function refreshAllDataSources() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const allSheets = ss.getSheets();

  // スプレッドシート全体のデータソース実行を有効にする
  SpreadsheetApp.enableAllDataSourcesExecution();

  allSheets.forEach(sheet => {
    const tables = sheet.getDataSourceTables();
    
    tables.forEach(table => {
      console.log(`[${sheet.getName()}]シートのデータソースを更新中...`);
      try {
        // 更新を開始し、完了を最大5分間待つ
        table.refreshData();
        table.waitForCompletion(300); 
        
        const status = table.getStatus();
        if (status.getExecutionState() === SpreadsheetApp.DataExecutionState.SUCCEEDED) {
          console.log("更新が正常に完了しました。");
        } else {
          console.error(`更新に失敗しました: ${status.getErrorCode()}`);
        }
      } catch (e) {
        console.error(`更新中にエラーが発生しました: ${e.message}`);
      }
    });
  });
}

データソースの仕様を動的に変更する

updateSpec()メソッドを使えば、GASからBigQueryのクエリを動的に変更することも可能です。

例えば、特定の日付範囲のデータだけを取得するように、クエリ内の日付文字列を書き換えることができます。

function updateQueryByDate() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const table = sheet.getDataSourceTables()[0]; // 最初のデータソース表を対象とする
  
  // 今日の日付を 'YYYY-MM-DD' 形式で取得
  const today = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd");
  
  const spec = table.getDataSource().getSpec();
  const originalQuery = spec.asBigQuery().getRawQuery();

  // クエリ内のプレースホルダを今日の日付で置換
  const newQuery = originalQuery.replace("{{TARGET_DATE}}", today);

  // 新しいクエリで仕様を更新
  const newSpec = spec.asBigQuery().setRawQuery(newQuery).build();
  table.getDataSource().updateSpec(newSpec);
  
  console.log("クエリを更新しました。");
}

まとめ

getDataSourceTables()と関連メソッドを使いこなすことで、スプレッドシートとBigQueryのデータ連携を高度に自動化できます。

  • getDataSourceTables() でシート内のデータソース表にアクセス。
  • refreshData()waitForCompletion() でデータ更新を自動化・同期。
  • updateSpec() でクエリを動的に変更し、より柔軟なデータ取得を実現。

これらのテクニックを活用して、データ分析やレポーティング業務の効率を飛躍的に向上させましょう。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Class DataSourceTable | Apps Script | Google for Developers

Connected Sheets cannot be targeted with macros or Scripts

As the update for Connected Sheets has rolled out, G Suite domains are (apparently) being upgraded from an initial BigQuery data connector that made use of the DataSourceTable object (ref below) to

関連記事

【GAS】スプレッドシートの指定範囲の行数を取得!getNumRows()徹底解説

【GAS】スプレッドシートの指定範囲の行数を取得!getNumRows()徹底解説

Google Apps Script (GAS) を使ってスプレッドシートの自動化を行う際、指定した「範囲にいくつの行が含まれているか」を正確に把握することは、スクリプトの柔軟性と汎用性を高める上で不可欠です。getNumRows() メソッドは、この範囲の行数を簡単に取得し、動的なデータ処理やデータ検証を可能にする強力なツールです。

本記事では、GASのgetNumRows()の基本的な使い方から、データ範囲の動的取得、getLastRow()との違い、二次元配列との連携、データフォーマットの検証と自動修正、さらにはパフォーマンス最適化まで、具体的なコードを交えて徹底解説します。getNumRows()をマスターし、スプレッドシートの自動化スクリプトをより堅牢で効率的なものに変えましょう。

【GAS】スプレッドシートの指定範囲の列数を取得!getNumColumns()徹底解説

【GAS】スプレッドシートの指定範囲の列数を取得!getNumColumns()徹底解説

Google Apps Script (GAS) を使ってスプレッドシートの自動化を行う際、指定した「範囲にいくつの列が含まれているか」を正確に把握することは、スクリプトの柔軟性と汎用性を高める上で不可欠です。getNumColumns() メソッドは、この範囲の列数を簡単に取得し、動的なデータ処理やデータ検証を可能にする強力なツールです。

本記事では、GASのgetNumColumns()の基本的な使い方から、データ範囲の動的取得、getLastColumn()との違い、データフォーマットの検証と自動修正といった実用的な応用例まで、具体的なコードを交えて徹底解説します。getNumColumns()をマスターし、スプレッドシートの自動化スクリプトをより堅牢で効率的なものに変えましょう。