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.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 範圍。不過,您應將範圍新增至服務帳戶的範圍清單。

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