커넥터가 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)
}