【发布时间】:2020-12-22 12:59:47
【问题描述】:
我在 Python 中将下面的 SQL 运行到 Google BigQuery,但出现错误 BadRequest: 400 Could not cast literal "" to type DATE
我想检查是否存在同一行 luid 的 cv_date 列中的数据,如果存在,则返回 True。 cv_date 列是 DATE 类型。我试过使用cv_date IS NOT NULL,但没有用。有人有想法吗?或者我需要改变这个SQL的逻辑??
from flask import Flask, request
from google.cloud import bigquery
app = Flask(__name__)
@app.route('/')
def get_request():
request_luid = request.args.get('luid') or ''
client = bigquery.Client()
query = """SELECT EXISTS(
SELECT 1
FROM `test-266778.conversion_log.conversion_log_2020*` as p
WHERE p.luid = '{}'
AND p.cv_date != '' limit 1000)""".format(request_luid)
job_config = bigquery.QueryJobConfig(
query_parameters=[
bigquery.ScalarQueryParameter("request_luid", "STRING", request_luid)
]
)
query_job = client.query(query)
query_res = query_job.result()
for row in query_res:
return str(row[0])
if __name__ == "__main__":
app.run()
【问题讨论】:
-
确实可以通过将
!= ""更改为IS NOT NULL来解决该错误。以查询为例:SELECT EXISTS(SELECT 1 FROM bigquery-public-data.austin_waste.waste_and_diversion as p WHERE p.load_id = 336590 AND p.report_date IS NOT NULL limit 1000 ).
标签: python-3.x google-app-engine flask google-bigquery