Использовать связанные листы

Подключённые таблицы — это функция Google Таблиц, которая позволяет анализировать данные BigQuery и Looker непосредственно в Таблицах. Доступ к подключённым таблицам осуществляется программно с помощью сервиса электронных таблиц.

Общие действия с подключенными таблицами

Используйте классы и объекты DataSource для подключения к BigQuery или Looker и анализа данных. В следующей таблице перечислены наиболее распространённые действия DataSource и способы их создания в Apps Script:

Действие Класс скрипта Google Apps Метод использования
Подключите лист к поддерживаемому источнику данных DataSourceSpec SpreadsheetApp.newDataSourceSpec()
Выберите источник данных DataSource Spreadsheet.insertDataSourceSheet().getDataSource()
Добавить лист источника данных DataSourceSheet Spreadsheet.insertDataSourceSheet()
Добавить сводную таблицу DataSourcePivotTable Range.insertDataSourcePivotTable()
Извлечь данные в извлечение DataSourceTable Range.insertDataSourceTable()
Используйте формулу DataSourceFormula Range.setFormula()
Добавить диаграмму DataSourceChart Sheet.insertDataSourceChart()

Добавить требуемые области авторизации

Для доступа к данным BigQuery необходимо включить метод enableBigQueryExecution() в код скрипта Google Apps. Этот метод добавляет требуемую область действия OAuth bigquery.readonly в ваш проект скрипта Google Apps.

В следующем примере показан метод SpreadsheetApp.enableBigQueryExecution() вызываемый внутри функции:

function addDataSource() {
  SpreadsheetApp.enableBigQueryExecution();
  var spreadsheet = SpreadsheetApp.getActive();
  }

Для доступа к данным Looker необходимо включить метод enableLookerExecution() в код скрипта Google Apps. Доступ к Looker в скрипте Apps Script позволит повторно использовать существующую связь с аккаунтом Google в Looker.

В следующем примере показан метод SpreadsheetApp.enableLookerExecution() вызываемый внутри функции:

function addDataSource() {
  SpreadsheetApp.enableLookerExecution();
  var spreadsheet = SpreadsheetApp.getActive();
  }

Добавить дополнительные области OAuth в файл манифеста

При подключении к BigQuery большинство областей действия OAuth автоматически добавляются в файл манифеста на основе функций, используемых в вашем коде. Если вам нужны дополнительные области действия для доступа к определённым данным BigQuery, вы можете указать их явно .

Например, чтобы запросить данные BigQuery, размещенные в Google Drive , необходимо добавить область действия Drive OAuth в файл манифеста.

В следующем примере показан раздел oauthScopes файла манифеста. Он добавляет область действия OAuth для диска в дополнение к минимально необходимым областям действия OAuth для spreadsheet и bigquery.readonly :

{ ...
  "oauthScopes": [
    "https://www.googleapis.com/auth/bigquery.readonly",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/drive" ],
... }

Пример: создание и обновление объекта источника данных

В следующих примерах показано, как добавить источник данных, создать объект источника данных из источника данных, обновить объект источника данных и получить статус выполнения.

Добавить источник данных

В следующих примерах показано, как добавить источники данных BigQuery и Looker соответственно.

BigQuery

Чтобы добавить источник данных BigQuery в электронную таблицу, вставьте лист источника данных со спецификацией источника данных. Лист источника данных автоматически обновится для получения данных предварительного просмотра.

Замените <YOUR_PROJECT_ID> ниже на действительный идентификатор проекта Google Cloud.

// For operations that fetch data from BigQuery, enableBigQueryExecution() must be called.
SpreadsheetApp.enableBigQueryExecution();
var spreadsheet = SpreadsheetApp.create('Test connected sheets');
Logger.log('New test spreadsheet: %s', spreadsheet.getUrl());

// Build data source spec by selecting a table.
var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
    .asBigQuery()
    .setProjectId('<YOUR_PROJECT_ID>')
    .setTableProjectId('bigquery-public-data')
    .setDatasetId('ncaa_basketball')
    .setTableId('mbb_historical_tournament_games')
    .build();
// Add data source and its associated data source sheet.
var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
var dataSource = dataSourceSheet.getDataSource();

Красавчик

Чтобы добавить источник данных Looker в электронную таблицу, вставьте лист с указанием его спецификации. Лист автоматически обновится для получения данных предварительного просмотра.

Замените <INSTANCE_URL> , <MODEL_NAME> , <EXPLORE_NAME> в следующем примере на действительный URL-адрес экземпляра Looker, имя модели и имя исследования соответственно.

// For operations that fetch data from Looker, enableLookerExecution() must be called.
SpreadsheetApp.enableLookerExecution();
var spreadsheet = SpreadsheetApp.create('Test connected sheets');
Logger.log('New test spreadsheet: %s', spreadsheet.getUrl());

// Build data source spec by selecting a table.
var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
    .asLooker()
    .setInstanceUrl('<INSTANCE_URL>')
    .setModelName('<MODEL_NAME>')
    .setExploreName('<EXPLORE_NAME>')
    .build();
// Add data source and its associated data source sheet.
var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
var dataSource = dataSourceSheet.getDataSource();

Добавить объект источника данных

После добавления источника данных в электронную таблицу можно создавать объекты источника данных. В этом примере сводная таблица создается с помощью DataSourcePivotTable на основе dataSource BigQuery, созданного в примере кода, добавляющем источник данных BigQuery .

В отличие от обычных данных в таблицах, на которые ссылаются по индексу ячейки или нотации A1, данные из источников данных обычно ссылаются по именам столбцов. Поэтому большинство методов установки свойств объектов источников данных используют имена столбцов в качестве входных данных.

var rootCell = spreadsheet.insertSheet('pivotTableSheet').getRange('A1');

// Add data source pivot table and set data source specific configurations.
var dataSourcePivotTable = rootCell.createDataSourcePivotTable(dataSource);
var rowGroup = dataSourcePivotTable.addRowGroup('season');
rowGroup.sortDescending().setGroupLimit(5);
dataSourcePivotTable.addColumnGroup('win_school_ncaa');
dataSourcePivotTable.addPivotValue('win_pts', SpreadsheetApp.PivotTableSummarizeFunction.AVERAGE);
dataSourcePivotTable.addPivotValue('game_date', SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
var filterCriteria = SpreadsheetApp.newFilterCriteria()
    .whenTextEqualToAny(['Duke', 'North Carolina'])
    .build();
dataSourcePivotTable.addFilter('win_school_ncaa', filterCriteria);

// Get a regular pivot table instance and set shared configurations.
var pivotTable = dataSourcePivotTable.asPivotTable();
pivotTable.setValuesDisplayOrientation(SpreadsheetApp.Dimension.ROWS);

Обновить объект источника данных

Вы можете обновить объекты источника данных, чтобы извлечь последние данные из BigQuery на основе спецификаций источника данных и конфигураций объектов.

Процесс обновления данных асинхронный. Для обновления объекта источника данных используйте следующие методы:

  1. refreshData() запускает выполнение обновления данных.
  2. waitForCompletion() возвращает конечное состояние после завершения обработки данных. Это устраняет необходимость постоянного опроса статуса выполнения.
  3. DataExecutionStatus.getErrorCode() получает код ошибки в случае сбоя выполнения данных.

Пример ниже иллюстрирует обновление данных сводной таблицы:

var status = dataSourcePivotTable.getStatus();
Logger.log('Initial state: %s', status.getExecutionState());

dataSourcePivotTable.refreshData();

status = dataSourcePivotTable.waitForCompletion(/* timeoutInSeconds= */ 60);
Logger.log('Ending state: %s', status.getExecutionState());
if (status.getExecutionState() == SpreadsheetApp.DataExecutionState.ERROR) {
  Logger.log('Error: %s (%s)', status.getErrorCode(), status.getErrorMessage());
}

Используйте триггеры с подключенными таблицами

Автоматизируйте функции источников данных Connected Sheets с помощью триггеров и событий . Например, используйте триггеры, управляемые по времени, для периодического обновления объектов источников данных в определённое время, а также триггеры событий электронных таблиц для запуска обработки данных при наступлении предопределённого события.

В следующем примере добавляется источник данных BigQuery с параметром запроса и обновляется лист источника данных при редактировании параметра запроса.

Замените <YOUR_PROJECT_ID> ниже на действительный идентификатор проекта Google Cloud.

// Add data source with query parameter.
function addDataSource() {
  SpreadsheetApp.enableBigQueryExecution();
  var spreadsheet = SpreadsheetApp.getActive();

  // Add a new sheet and use A1 cell as the parameter cell.
  var parameterCell = spreadsheet.insertSheet('parameterSheet').getRange('A1');
parameterCell.setValue('Duke');

  // Add data source with query parameter.
  var dataSourceSpec = SpreadsheetApp.newDataSourceSpec()
      .asBigQuery()
      .setProjectId('<YOUR_PROJECT_ID>')
      .setRawQuery('select * from `bigquery-public-data`.`ncaa_basketball`.`mbb_historical_tournament_games` WHERE win_school_ncaa = @SCHOOL')
      .setParameterFromCell('SCHOOL', 'parameterSheet!A1')
      .build();
  var dataSourceSheet = spreadsheet.insertDataSourceSheet(dataSourceSpec);
  dataSourceSheet.asSheet().setName('ncaa_data');
}

// Function used to configure event trigger to refresh data source sheet.
function refreshOnParameterEdit(e) {
  var editedRange = e.range;
if (editedRange.getSheet().getName() != 'parameterSheet') {
  return;
}
// Check that the edited range includes A1.
if (editedRange.getRow() > 1 || editedRange.getColumn() > 1) {
   return;
}

  var spreadsheet = e.source;
  SpreadsheetApp.enableBigQueryExecution();
  spreadsheet.getSheetByName('ncaa_data').asDataSourceSheet().refreshData();
}

В приведённом выше примере функция addDataSource() добавляет источник данных в электронную таблицу. После выполнения addDataSource() создайте триггер события в редакторе Apps Script. Чтобы узнать, как создать триггер события, см. раздел Устанавливаемые триггеры .

Выберите следующие параметры для вашего триггера:

  • Источник события : Из электронной таблицы
  • Тип события : При редактировании
  • Функция для запуска : refreshOnParameterEdit

После создания триггера лист источника данных автоматически обновляется каждый раз при редактировании ячейки параметра.

Устранение неполадок

Сообщение об ошибке Разрешение
Используйте enableBigQuery() , чтобы включить выполнение данных для источников данных BIGQUERY. Эта ошибка означает, что SpreadsheetApp.enableBigQueryExecution() не вызывается перед извлечением данных BigQuery.
Вызывайте SpreadsheetApp.enableBigQueryExecution() в функциях, которые используют методы для выполнения BigQuery.
Например, refreshData() для объектов источника данных, Spreadsheet.insertDataSourceTable() и DataSource.updateSpec() .
Для работы этих методов требуется дополнительная область bigquery.readonly OAuth.
Не разрешено действовать на основе источников данных.
Чтобы включить эту функцию, обратитесь к администратору.
Эта ошибка означает, что в учетной записи не включены подключенные таблицы.
Подключенные таблицы доступны только пользователям Google Workspace с определенными подписками.
Чтобы включить эту функцию, обратитесь к администратору.