커넥터가 BigQuery에서 데이터를 가져오는 경우 데이터 스튜디오 고급 서비스를 사용하여 커넥터를 최적화할 수 있습니다. BigQuery API를 직접 호출하는 대신 쿼리 구성을 제공하면 데이터 스튜디오에서 데이터와 스키마를 가져옵니다.
작동 방식
데이터 스튜디오 고급 서비스를 사용하는 커뮤니티 커넥터는 일반 커넥터와 비슷하게 작동합니다.
주목할 만한 차이점은
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 Data Studio's Advanced Services.",
"advancedServices": {
"schema": true,
"data": true
}
},
"oauthScopes": ["https://www.googleapis.com/auth/bigquery.readonly"]
}
서비스 계정을 사용하여 BigQuery에 액세스하는 경우 매니페스트에 bigquery.readonly OAuth 범위가 필요하지 않습니다. 하지만 서비스 계정의 범위 목록에 범위를 추가해야 합니다.
getData 및 getSchema 참조
데이터 스튜디오 고급 서비스를 사용하는 커넥터는 쿼리 구성 객체
를 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)
}