Расширенные услуги Data Studio

Если ваш коннектор получает данные из BigQuery, вы можете использовать Data Studio Advanced Services для его оптимизации. Вместо прямого вызова API BigQuery вы предоставляете конфигурацию запроса, и Data Studio автоматически получит данные и схему.

Как это работает

Коннекторы сообщества, использующие расширенные службы Data Studio, работают аналогично обычным коннекторам.

Существенное отличие заключается в ожидаемом ответе от выполнения функций getSchema() и/или getData() . Вместо получения и возврата схемы и данных эти функции могут возвращать конфигурации запроса. Когда возвращается конфигурация запроса, Data Studio напрямую получает схему и/или данные на основе предоставленной конфигурации запроса.

Разработка вашего коннектора

Коннекторы сообщества, использующие расширенные службы Data Studio, идентичны обычным коннекторам, за двумя исключениями.

  1. Дополнительный ключ манифеста
  2. Другой ответ от getSchema() и/или getData()

Ссылка на манифест

В файле манифеста установите для следующих свойств значение true .

  • Для getSchema() используйте свойство dataStudio.advancedServices.schema
  • Для getData() используйте свойство dataStudio.advancedServices.data

Значение true указывает на то, что для соответствующей функции ваш коннектор вернет конфигурацию запроса вместо стандартного ответа.

Чтобы определить собственную схему, используя стандартный ответ getSchema() , установите свойство dataStudio.advancedServices.schema в значение false в манифесте или опустите это свойство. Это необходимо, когда все поля вашей схемы не могут быть представлены одним запросом BigQuery, например, при создании коннектора для нескольких схем.

Поскольку запрос BigQuery будет выполняться от имени авторизованного пользователя, вам также необходимо включить область действия OAuth BigQuery ( "https://www.googleapis.com/auth/bigquery.readonly" ) в манифест для запроса авторизации.

Ниже представлен манифест коннектора, использующий учетные данные авторизованного пользователя для подключения к BigQuery:

{
  "dataStudio": {
    "name": "BigQuery Public Dataset Demo",
    "logoUrl": "https://www.gstatic.com/images/branding/product/1x/data_connector_48dp.png",
    "company": "Looker DevRel",
    "companyUrl": "https://developers.google.com/looker-studio/",
    "addOnUrl": "https://developers.google.com/looker-studio/",
    "supportUrl": "https://developers.google.com/looker-studio/",
    "description": "Use BigQuery public dataset with Data Studio's Advanced Services.",
    "advancedServices": {
      "schema": true,
      "data": true
    }
  },
  "oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
}

Если для доступа к BigQuery используется служебная учетная запись, то область действия OAuth bigquery.readonly в манифесте не требуется. Однако эту область действия следует добавить в список областей действия для служебной учетной записи.

Справочник по функциям getData и getSchema

Коннекторы, использующие Data Studio Advanced Services, возвращают объект конфигурации запроса для getSchema() и/или getData() . В зависимости от источника данных, эта конфигурация может потребовать дополнительных свойств.

Ниже приведён пример использования службы DataStudioApp для создания этого объекта конфигурации:

var bqTypes = DataStudioApp.createCommunityConnector().BigQueryParameterType;
var configuration = DataStudioApp.createCommunityConnector().newBigQueryConfig()
    // BigQuery billing project's Id.
    .setBillingProjectId('billingProjectId')
    // The query that will be executed.
    .setQuery('myQueryString')
    // Set to `true` to use StandardSQL.
    .setUseStandardSql(true)
    // The accessToken used for service execution.
    .setAccessToken('myAccessToken')
    // Adding a `STRING` query parameter. Other supported types are `BOOL`,
    // `FLOAT64`, and `INT64`.
    .addQueryParameter('myUrlParameterName', bqTypes.STRING, 'myUrlParameterValue')
    .build();

Пример функций getSchema() и getData()

var sqlString = "" +
    "SELECT " +
    "  _TABLE_SUFFIX AS yyyymm, " +
    "  ROUND(SUM(IF(fcp.start < @fast_fcp, fcp.density, 0)), 4) AS fast_fcp, " +
    "  ROUND(SUM(IF(fcp.start >= 1000 AND fcp.start < 3000, fcp.density, 0)), 4) AS avg_fcp, " +
    "  ROUND(SUM(IF(fcp.start >= 3000, fcp.density, 0)), 4) AS slow_fcp " +
    "FROM " +
    "  `chrome-ux-report.all.*`, " +
    "  UNNEST(first_contentful_paint.histogram.bin) AS fcp " +
    "WHERE " +
    "  origin = @url " +
    "GROUP BY " +
    "  yyyymm " +
    "ORDER BY " +
    "  yyyymm ";

function getQueryConfig(request) {
  var url = (request.configParams && request.configParams.url);
  var projectId = (request.configParams && request.configParams.projectId);
  var authToken = ScriptApp.getOAuthToken();
  return DataStudioApp.createCommunityConnector().newBigQueryConfig()
      .setAccessToken(authToken)
      .setUseStandardSql(true)
      .setBillingProjectId(projectId)
      .setQuery(sqlString)
      .addQueryParameter('url', bqTypes.STRING, url)
      .addQueryParameter('fast_fcp', bqTypes.INT64, '' + 1000)
      .build();
}

function getSchema(request) {
  return getQueryConfig(request);
}

function getData(request) {
  return getQueryConfig(request)
}