Nếu trình kết nối của bạn tìm nạp dữ liệu từ BigQuery, thì bạn có thể sử dụng Dịch vụ nâng cao của Data Studio để tối ưu hoá trình kết nối. Thay vì gọi trực tiếp API BigQuery, bạn cung cấp cấu hình truy vấn và Data Studio sẽ tìm nạp dữ liệu và giản đồ cho bạn.
Cách hoạt động
Community Connector sử dụng Data Studio Advanced Services hoạt động tương tự như một trình kết nối thông thường.
Điểm khác biệt đáng chú ý là phản hồi dự kiến từ việc thực thi các hàm getSchema() và/hoặc getData(). Thay vì tìm nạp và trả về một giản đồ và dữ liệu, các hàm này có thể trả về cấu hình truy vấn.
Khi một cấu hình truy vấn được trả về, Data Studio sẽ trực tiếp tìm nạp giản đồ và/hoặc dữ liệu dựa trên cấu hình truy vấn được cung cấp.
Phát triển trình kết nối
Trình kết nối cộng đồng sử dụng Dịch vụ nâng cao của Data Studio giống như một trình kết nối thông thường, ngoại trừ 2 điểm.
Tài liệu tham khảo về tệp kê khai
Trong manifest, hãy đặt các thuộc tính sau thành true.
- Đối với
getSchema(), hãy sử dụng thuộc tínhdataStudio.advancedServices.schema - Đối với
getData(), hãy sử dụng thuộc tínhdataStudio.advancedServices.data
Giá trị true cho biết rằng đối với hàm tương ứng, trình kết nối của bạn sẽ trả về một cấu hình truy vấn thay vì phản hồi tiêu chuẩn.
Để xác định giản đồ của riêng bạn bằng cách sử dụng phản hồi getSchema() tiêu chuẩn, hãy đặt dataStudio.advancedServices.schema thành false trong tệp kê khai hoặc bỏ qua thuộc tính này. Điều này là cần thiết khi tất cả các trường trong giản đồ của bạn không thể được biểu thị bằng một truy vấn BigQuery duy nhất, ví dụ: khi bạn đang tạo một trình kết nối nhiều giản đồ.
Vì truy vấn BigQuery sẽ được thực thi thay cho người dùng được uỷ quyền, nên bạn cũng cần đưa phạm vi OAuth của BigQuery ("https://www.googleapis.com/auth/bigquery.readonly") vào tệp kê khai để yêu cầu uỷ quyền.
Sau đây là một tệp kê khai trình kết nối sử dụng thông tin đăng nhập của người dùng được uỷ quyền để kết nối với 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"]
}
Nếu đang sử dụng tài khoản dịch vụ để truy cập BigQuery, thì bạn không cần có phạm vi bigquery.readonly OAuth trong tệp kê khai. Tuy nhiên, bạn nên thêm phạm vi vào danh sách phạm vi cho tài khoản dịch vụ.
getData và getSchema tham khảo
Các trình kết nối sử dụng Dịch vụ nâng cao của Data Studio sẽ trả về một đối tượng cấu hình truy vấn cho getSchema() và/hoặc getData(). Tuỳ thuộc vào nguồn dữ liệu, cấu hình này có thể cần các thuộc tính bổ sung.
Sau đây là ví dụ về cách sử dụng dịch vụ DataStudioApp để tạo đối tượng cấu hình này:
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();
Ví dụ về hàm getSchema() và 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)
}