Дополнительные службы Студии данных

Если ваш коннектор получает данные из BigQuery, вы можете оптимизировать его работу с помощью дополнительных служб Студии данных. Это позволит не вызывать напрямую BigQuery API, а лишь определить конфигурацию запроса, с помощью которого Студия данных будет получать нужные вам данные.

Описание

Коннекторы с открытым кодом, использующие дополнительные службы Студии данных, работают почти так же, как и обычные.

Основное отличие – ожидаемый ответ при выполнении функции getData(). Вместо получения и возвращения данных функция getData() должна возвращать конфигурацию запроса, который будет использоваться сервисом для получения данных.

Разработка коннектора

Коннектор с открытым кодом, использующий дополнительные службы Студии данных, имеет лишь два отличия от обычного:

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

Справка по манифесту

В манифесте необходимо задать для свойства dataStudio.useQueryConfig значение true. Это сообщит Студии данных, что функция getData() будет возвращать конфигурацию запроса, а не данные.

Поскольку запрос BigQuery будет выполняться от имени авторизованного пользователя, вам также потребуется указать область действия OAuth ("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": "Data Studio DevRel",
        "companyUrl": "https://developers.google.com/datastudio/",
        "addOnUrl": "https://developers.google.com/datastudio/",
        "supportUrl": "https://developers.google.com/datastudio/",
        "description": "Use BigQuery public dataset with Data Studio's Advanced Services.",
        "useQueryConfig": true
      },
      "oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
    }
    

Справка по getData

Коннектор, использующий дополнительные службы Студии данных, возвращает для getData объект конфигурации запроса. В зависимости от источника данных, в конфигурации может потребоваться указать дополнительные свойства. Например, для BigQuery используется свойство bigQueryConnectorConfig.

Ниже приведен пример использования службы 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();
    

Пример функции 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 getData(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();
    }