Python向BigQuery查询传外部日期变量遇类型匹配错误求助
问题解决方法
你的错误根源是Python变量未正确传入BigQuery的SQL查询,BigQuery将代码里的desired_date识别成了INT64类型的标识符,而非你定义的日期字符串,导致它和DATE(date)的DATE类型无法匹配,触发类型不兼容错误。
下面是两种可靠的解决方式:
方式一:参数化查询(推荐)
借助pandas_gbq的参数传递功能,既能保证类型匹配,又能避免SQL注入风险:
desired_date = "2022-09-28" #@param {type:"date"} import pandas as pd query = ''' SELECT * FROM `gdelt-bq.gdeltv2.geg_gcnlapi` WHERE DATE(date) = @desired_date LIMIT 1000 ''' df = pd.io.gbq.read_gbq( query, project_id=project_id, dialect='standard', params={"desired_date": desired_date} )
方式二:安全字符串格式化
如果偏好字符串拼接,需确保日期被BigQuery的DATE类型正确识别(用单引号包裹):
desired_date = "2022-09-28" #@param {type:"date"} import pandas as pd query = f''' SELECT * FROM `gdelt-bq.gdeltv2.geg_gcnlapi` WHERE DATE(date) = '{desired_date}' LIMIT 1000 ''' df = pd.io.gbq.read_gbq(query, project_id=project_id, dialect='standard')
注意:此方法仅适用于变量来源安全的场景,参数化查询是更规范的工程化做法。
内容的提问来源于stack exchange,提问作者Itay Etelis
相关产品推荐
相关产品推荐

