Если ваш коннектор получает данные из BigQuery, вы можете использовать расширенные сервисы Looker Studio для его оптимизации. Вместо прямого вызова API BigQuery вы предоставляете конфигурацию запроса, и Looker Studio получит данные и схему за вас.
Как это работает
Сообщественные коннекторы, использующие расширенные сервисы Looker Studio, работают аналогично обычным коннекторам.
Существенное отличие заключается в ожидаемом ответе от выполнения функций getSchema() и/или getData() . Вместо получения и возврата схемы и данных эти функции могут возвращать конфигурации запроса. Когда возвращается конфигурация запроса, Looker Studio напрямую получает схему и/или данные на основе предоставленной конфигурации запроса.
Разработка вашего коннектора
Коннекторы сообщества, использующие расширенные сервисы Looker Studio, идентичны обычным коннекторам, за двумя исключениями.
Ссылка на манифест
В файле манифеста установите для следующих свойств значение 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 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)
}