Looker 数据洞察高级服务

如果您的连接器从 BigQuery 提取数据,您可以使用 Looker Studio 高级服务,用于优化您的连接器。您无需调用 BigQuery API,您只需提供查询配置,Looker Studio 就会提取 数据和架构

工作原理

使用 Looker Studio 高级服务的社区连接器的工作方式类似于 普通连接器。

主要区别在于,执行 getSchema() 和/或 getData() 函数。您不必再提取并 返回架构和数据,这些函数可以返回查询配置。 返回查询配置后,Looker Studio 将直接提取 架构和/或数据。

开发连接器

使用 Looker Studio 高级服务的社区连接器等同于 普通连接器,但有两点例外。

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

清单参考

清单中,将以下属性设置为 true

  • 对于 getSchema(),请使用 dataStudio.advancedServices.schema 属性
  • 对于 getData(),请使用 dataStudio.advancedServices.data 属性

true 表示对于相应函数,您的连接器 将返回查询配置,而不是标准响应。

如需使用标准 getSchema() 响应定义您自己的架构,请将 将 dataStudio.advancedServices.schema 重命名为 false,或省略此内容 属性。当架构中的所有字段都无法用 表示时,就需要这样做 单个 BigQuery 查询,例如创建多架构连接器时要遵循的注意事项。

由于系统将代表授权用户执行 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": "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"]
}

如果您使用服务账号来访问 BigQuery, bigquery.readonly在清单中不需要 OAuth 范围。不过, 范围应添加到服务账号的范围列表中。

getDatagetSchema 参考

使用 Looker Studio 高级服务的连接器会返回查询配置对象 适用于 getSchema() 和/或 getData()。根据具体的数据源 配置可能需要其他属性。

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

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