Si tu conector recupera datos de BigQuery, puedes usar los servicios avanzados de Looker Studio para optimizarlo. En lugar de llamar directamente a la API de BigQuery, proporcionas una configuración de consulta y Looker Studio recuperará los datos y el esquema por ti.
Cómo funciona
Los conectores de la comunidad que usan los Servicios avanzados de Looker Studio funcionan de manera similar a un conector normal.
La diferencia más notable es la respuesta esperada de la ejecución de las funciones getSchema() o getData(). En lugar de recuperar y devolver un esquema y datos, estas funciones pueden devolver configuraciones de consultas.
Cuando se devuelve una configuración de consulta, Looker Studio recuperará directamente el esquema o los datos según la configuración de consulta proporcionada.
Desarrolla tu conector
Los conectores de la comunidad que usan los servicios avanzados de Looker Studio son iguales a los conectores normales, con dos excepciones.
Referencia del manifiesto
En el manifiesto, establece las siguientes propiedades en true.
- Para
getSchema(), usa la propiedaddataStudio.advancedServices.schema - Para
getData(), usa la propiedaddataStudio.advancedServices.data
Un valor de true indica que, para la función respectiva, tu conector devolverá una configuración de consulta en lugar de la respuesta estándar.
Para definir tu propio esquema con la respuesta getSchema() estándar, configura dataStudio.advancedServices.schema como false en el manifiesto o bien omite esta propiedad. Esto es necesario cuando todos los campos de tu esquema no se pueden representar con una sola consulta de BigQuery, p.ej., cuando creas un conector de varios esquemas.
Dado que la consulta de BigQuery se ejecutará en nombre del usuario autorizado, también debes incluir el permiso de OAuth de BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") en el manifiesto para solicitar la autorización.
A continuación, se muestra un manifiesto del conector que usa las credenciales del usuario autorizado para conectarse a 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"]
}
Si usas una cuenta de servicio para acceder a BigQuery, no se requiere el permiso de OAuth bigquery.readonly en el manifiesto. Sin embargo, el alcance debe agregarse a la lista de alcances de la cuenta de servicio.
Referencia de getData y getSchema
Los conectores que usan los servicios avanzados de Looker Studio devuelven un objeto de configuración de la consulta para getSchema() o getData(). Según la fuente de datos, es posible que esta configuración necesite propiedades adicionales.
A continuación, se muestra un ejemplo del uso del servicio DataStudioApp para crear este objeto de configuración:
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();
Ejemplo de función getSchema() y 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)
}