Services avancés de Looker Studio

Si votre connecteur récupère des données à partir de BigQuery, vous pouvez l'optimiser à l'aide des services avancés de Looker Studio. Au lieu d'appeler directement l'API BigQuery, vous fournissez une configuration de requête, et Looker Studio extrait automatiquement les données et le schéma.

Fonctionnement

Les connecteurs de communauté qui utilisent les services avancés de Looker Studio fonctionnent de la même manière qu'un connecteur standard.

La différence notable est la réponse attendue lors de l'exécution des fonctions getSchema() et/ou getData(). Au lieu de récupérer et de renvoyer un schéma et des données, ces fonctions peuvent renvoyer des configurations de requête. Lorsqu'une configuration de requête est renvoyée, Looker Studio récupère directement le schéma et/ou les données en fonction de la configuration de requête fournie.

Développer votre connecteur

Les connecteurs de communauté qui utilisent les services avancés de Looker Studio sont identiques à un connecteur standard, à deux exceptions près.

  1. Une clé de fichier manifeste supplémentaire
  2. Réponse différente de getSchema() et/ou getData()

Référence du fichier manifeste

Dans le fichier manifeste, définissez les propriétés suivantes sur true.

  • Pour getSchema(), utilisez la propriété dataStudio.advancedServices.schema.
  • Pour getData(), utilisez la propriété dataStudio.advancedServices.data.

La valeur true indique que pour la fonction concernée, le connecteur renverra une configuration de requête au lieu de la réponse standard.

Pour définir votre propre schéma à l'aide de la réponse getSchema() standard, définissez dataStudio.advancedServices.schema sur false dans le fichier manifeste ou omettez cette propriété. Cette étape est nécessaire lorsque tous les champs de votre schéma ne peuvent pas être représentés par une seule requête BigQuery, par exemple lorsque vous créez un connecteur multischéma.

Étant donné que la requête BigQuery sera exécutée pour le compte de l'utilisateur autorisé, vous devez également inclure le champ d'application OAuth de BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") dans le fichier manifeste pour demander l'autorisation.

Voici un fichier manifeste de connecteur utilisant les identifiants de l'utilisateur autorisé pour se connecter à 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 vous utilisez un compte de service pour accéder à BigQuery, le champ d'application OAuth de bigquery.readonly n'est pas requis dans le fichier manifeste. Toutefois, le champ d'application doit être ajouté à la liste des niveaux d'accès du compte de service.

Documentation de référence sur getData et getSchema

Les connecteurs qui utilisent les services avancés Looker Studio renvoient un objet de configuration de requête pour getSchema() et/ou getData(). Selon la source de données, cette configuration peut nécessiter des propriétés supplémentaires.

Voici un exemple d'utilisation du service DataStudioApp pour créer cet objet de configuration:

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

Exemples de fonctions getSchema() et 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)
}