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

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

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

Соединители сообщества, использующие дополнительные службы Looker Studio, работают аналогично обычному соединителю.

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

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

Соединители сообщества, использующие дополнительные службы Looker Studio, аналогичны обычным соединителям, за двумя исключениями.

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

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

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

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

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

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

Поскольку запрос BigQuery будет выполняться от имени авторизованного пользователя, вам также необходимо включить область 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": "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 Looker Studio's Advanced Services.",
    "advancedServices": {
      "schema": true,
      "data": true
    }
  },
  "oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
}

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

Ссылка на getData и getSchema

Соединители, использующие дополнительные службы Looker Studio, возвращают объект конфигурации запроса для 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)
}