Servicios avanzados de Looker Studio

Si tu conector recupera datos de BigQuery, puedes usar Looker Studio Servicios avanzados para optimizar tu conector. En lugar de llamar al directamente a la API, proporcionas una configuración de consulta y Looker Studio recuperará y el esquema por ti.

Cómo funciona

Los Connectors 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 que se espera de la ejecución del funciones getSchema() o getData(). En lugar de buscar y un esquema y datos, estas funciones pueden mostrar configuraciones de consulta. Cuando se devuelva una configuración de consulta, Looker Studio recuperará directamente el el esquema o los datos según la configuración de consulta proporcionada.

Desarrolla tu conector

Los conectores de comunidad que usan los servicios avanzados de Looker Studio son los mismos que de un conector normal, con dos excepciones.

  1. Una clave de manifiesto adicional
  2. Una respuesta diferente de getSchema() o getData()

Referencia del manifiesto

En el manifiesto, establece las siguientes propiedades en true.

  • Para getSchema(), usa la propiedad dataStudio.advancedServices.schema.
  • Para getData(), usa la propiedad dataStudio.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 estándar getSchema(), configura dataStudio.advancedServices.schema por false en el manifiesto, o bien omite esto propiedad. Esto es necesario cuando todos los campos de tu esquema no se pueden representar mediante para una sola consulta en 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 es necesario incluir el permiso de OAuth de BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") en el manifiesto para solicitar autorización.

A continuación, se muestra un manifiesto del conector en el que se usan 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, bigquery.readonly El permiso de OAuth no es obligatorio en el manifiesto. Sin embargo, el permiso se debe agregar a la lista de permisos de la cuenta de servicio.

Referencia de getData y getSchema

Los conectores que usan los servicios avanzados de Looker Studio muestran un objeto de configuración de consultas para getSchema() o getData(). Según la fuente de datos, esta config puede necesitar propiedades adicionales.

A continuación, se muestra un ejemplo de cómo usar el servicio DataStudioApp para crear esto de configuración de Terraform:

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();

Funciones getSchema() y getData() de ejemplo

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)
}