Looker Studio 고급 서비스

커넥터가 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.schemafalse로 설정하거나 이 속성을 생략합니다. 이 작업은 단일 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)
}