发布查询试运行

在 CLI 中运行查询时,您可以使用 --dry_run 试运行标志来估算查询读取的字节数。在使用 API 或客户端库提交查询作业时,您还可以使用 dryRun 参数。

您可以使用试运行返回的估算值在价格计算器中计算查询费用。您不需要为执行试运行的操作支付费用。

所需权限

为运行查询作业,您至少必须具有 bigquery.jobs.create 权限。为成功完成查询作业,您还必须具有对包含查询引用的表或视图的数据集的访问权限。如需了解数据集访问权限控制,请参阅控制对数据集的访问权限

以下预定义的 Cloud IAM 角色包含 bigquery.jobs.create 权限:

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

此外,如果用户具有 bigquery.datasets.create 权限,则当该用户创建数据集时,系统会为其授予该数据集的 bigquery.dataOwner 访问权限。 借助 bigquery.dataOwner 访问权限,用户可以查询数据集中的表和视图。

如需详细了解 BigQuery 中的 Cloud IAM 角色,请参阅预定义的角色和权限

执行试运行

您可以使用以下方法对查询作业执行试运行:

  • CLI 中含 --dry_run 标志的 query 命令
  • 使用 API 或客户端库时在作业配置中设置 dryRun 参数

执行试运行

如需执行试运行,请执行以下操作:

控制台

目前,您无法使用 GCP Console 执行试运行。

经典版界面

目前,您无法使用网页界面执行试运行。

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))
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面