發出查詢模擬測試

在 CLI 中執行查詢時,您可以使用 --dry_run 旗標來估算讀取的位元組數。此外,您也可在使用 API 或用戶端程式庫提交查詢工作時使用 dryRun 參數。

您可以利用模擬測試傳回的估算值,在 Pricing Calculator 中計算查詢費用。執行模擬測試不會收取費用。

必要權限

您至少要具備 bigquery.jobs.create 權限,才能執行查詢工作。此外,如要順利完成查詢工作,您還必須具備相關權限以存取該查詢工作參照的資料表或檢視表所屬的資料集。如要進一步瞭解資料集存取權控管,請參閱控管資料集存取權一文。

以下是具有 bigquery.jobs.create 權限的預先定義 Cloud IAM 角色:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

此外,當具備 bigquery.datasets.create 權限的使用者建立資料集時,該使用者會獲得該資料集的 bigquery.dataOwner 存取權。bigquery.dataOwner 存取權可讓使用者查詢資料集中的資料表和檢視表。

如要進一步瞭解 BigQuery 中的 Cloud IAM 角色,請參閱預先定義的角色和權限一文。

執行模擬測試

您可以使用下列方式執行查詢工作的模擬測試:

  • CLI 中的 query 指令搭配 --dry_run 旗標
  • 使用 API 或用戶端程式庫時,工作設定中的 dryRun 參數

執行模擬測試

如何執行模擬測試:

主控台

目前無法透過 Cloud Console 執行模擬測試。

傳統版 UI

目前無法透過網頁版 UI 執行模擬測試。

CLI

使用 --dry_run 旗標輸入如下的查詢。

bq query \
--use_legacy_sql=false \
--dry_run \
'SELECT
   COUNTRY,
   AIRPORT,
   IATA
 FROM
   `project_id`.dataset.airports
 LIMIT
   1000'
 

這項指令會產生下列回應:

Query successfully validated. Assuming the tables are not modified,
running this query will process 10918 bytes of data.

API

如要使用 API 執行模擬測試,請在工作設定中將 dryRun 設定成 true 來提交查詢工作。

Go

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Go 設定說明進行操作。詳情請參閱 BigQuery Go API 參考資料說明文件

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
q := client.Query(`
SELECT
	name,
	COUNT(*) as name_count
FROM ` + "`bigquery-public-data.usa_names.usa_1910_2013`" + `
WHERE state = 'WA'
GROUP BY name`)
q.DryRun = true
// Location must match that of the dataset(s) referenced in the query.
q.Location = "US"

job, err := q.Run(ctx)
if err != nil {
	return err
}
// Dry run is not asynchronous, so get the latest status and statistics.
status := job.LastStatus()
if err != nil {
	return err
}
fmt.Printf("This query will process %d bytes\n", status.Statistics.TotalBytesProcessed)

Python

如要使用 Python 用戶端程式庫執行模擬測試,請將 QueryJobConfig.dry_run 屬性設為 True。如果有提供模擬測試的查詢設定,則 Client.query() 一律會傳回已完成的 QueryJob

在試行這個範例之前,請先按照 BigQuery 快速入門導覽課程:使用用戶端程式庫中的 Python 設定說明進行操作。詳情請參閱 BigQuery Python API 參考資料說明文件

# from google.cloud import bigquery
# client = bigquery.Client()

job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = client.query(
    (
        "SELECT name, COUNT(*) as name_count "
        "FROM `bigquery-public-data.usa_names.usa_1910_2013` "
        "WHERE state = 'WA' "
        "GROUP BY name"
    ),
    # Location must match that of the dataset(s) referenced in the query.
    location="US",
    job_config=job_config,
)  # API request

# A dry run query completes immediately.
assert query_job.state == "DONE"
assert query_job.dry_run

print("This query will process {} bytes.".format(query_job.total_bytes_processed))