数据洞察高级服务

如果您的连接器从 BigQuery 中提取数据,则您可以使用数据洞察高级服务来优化自己的连接器。您无需直接调用 BigQuery API,只需提供查询配置,数据洞察即会为您提取数据。

工作原理

使用数据洞察高级服务的社区连接器在工作原理上与普通连接器类似。

主要区别在于执行 getData() 函数后的预期响应。getData() 应返回一项查询配置供数据洞察用来提取数据,而不是提取并返回数据。

开发连接器

使用数据洞察高级服务的社区连接器与普通连接器几乎相同,不同之处有以下两点。

  1. 前者有一个额外的清单键
  2. 来自 getData() 的响应不同

清单参考

清单中,应将 dataStudio.useQueryConfig 属性设为 true。这会告知数据洞察您的连接器的 getData() 函数将返回查询配置而不是数据。

由于您将代表授权用户执行 BigQuery 查询,因此还需要包含 BigQuery OAuth 范围 ("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": "Data Studio DevRel",
        "companyUrl": "https://developers.google.com/datastudio/",
        "addOnUrl": "https://developers.google.com/datastudio/",
        "supportUrl": "https://developers.google.com/datastudio/",
        "description": "Use BigQuery public dataset with Data Studio's Advanced Services.",
        "useQueryConfig": true
      },
      "oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
    }
    

getData 参考

对于使用数据洞察高级服务的连接器,其 getData 函数会返回一个查询配置对象。此配置可能需要一些额外的属性,具体取决于数据源。例如,BigQuery 就需要 bigQueryConnectorConfig 属性。

下例便是使用 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();
    

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