如果您的连接器从 BigQuery 中提取数据,则您可以使用 Looker Studio 高级服务来优化自己的连接器。您无需直接调用 BigQuery API,只需提供查询配置,Looker Studio 就会为您提取数据和架构。
运作方式
使用 Looker Studio 高级服务的社区连接器在工作原理上与普通连接器类似。
主要区别在于执行 getSchema() 和/或 getData() 函数后的预期响应。这些函数可以返回查询配置,而不是提取并返回架构和数据。返回查询配置后,Looker Studio 会直接根据所提供的查询配置提取架构和/或数据。
开发连接器
使用 Looker Studio 高级服务的社区连接器与普通连接器几乎相同,不同之处有以下两点。
清单参考
在清单中,将以下属性设为 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 范围。不过,应将该范围添加到服务账号的范围列表中。
getData 和 getSchema 参考文档
对于使用 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)
}