BigQuery参数化查询同一列时如何设置时间范围?
解决BigQuery参数化范围查询的重复参数错误
你遇到的错误是因为重复使用了同一个参数名received_datetime,BigQuery不允许参数列表中存在同名参数。要实现同一列的范围查询,只需给两个参数设置不同名称,再在查询语句中对应引用即可。
正确代码示例
from google.cloud import bigquery from google.cloud.bigquery import ScalarQueryParameter import datetime # 修改查询语句,用不同名称区分两个时间参数 query_body = """SELECT * FROM `my_table` WHERE received_datetime >= @start_date AND received_datetime <= @end_date LIMIT 100""" # 定义两个不同名称的参数,分别对应起始和结束日期 query_parameters = [ ScalarQueryParameter('start_date', 'DATE', datetime.datetime(2022, 11, 30, 0, 0)), ScalarQueryParameter('end_date', 'DATE', datetime.datetime(2022, 12, 7, 0, 0)) ] job_config = bigquery.QueryJobConfig(query_parameters=query_parameters) # 修正原代码中变量名不一致问题(定义了query_body却传入query_string) query_job = client.query(query_body, job_config=job_config).result()
关键修改说明
- 将查询语句中的两个
@received_datetime分别改为@start_date和@end_date,明确区分起始和结束时间条件 - 参数列表使用对应名称的参数,彻底避免同名参数冲突
- 同步修正了原代码中
query_body和query_string的变量名不一致问题
内容的提问来源于stack exchange,提问作者rob
相关产品推荐
相关产品推荐

