Services avancés de Looker Studio

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

Fonctionnement

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

La différence notable réside dans la réponse attendue de l'exécution des fonctions getSchema() et/ou getData(). Au lieu d'extraire 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 Looker Studio sont identiques à un connecteur normal, à deux exceptions près.

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

Documentation de référence sur le 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.

Une valeur true indique que, pour la fonction correspondante, votre 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é. Cela 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 au nom de l'utilisateur autorisé, vous devez également inclure le champ d'application OAuth BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") dans le fichier manifeste pour demander l'autorisation.

Voici un fichier manifeste de connecteur qui utilise 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 bigquery.readonly n'est pas requis dans le fichier manifeste. Toutefois, le champ d'application doit être ajouté à la liste des champs d'application du compte de service.

Documentation de référence sur getData et getSchema

Les connecteurs utilisant les services avancés Looker Studio renvoient un objet de configuration de requête pour getSchema() et/ou getData(). En fonction de 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();

Exemple de fonction 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)
}