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