【问题标题】:how to handle NULL values in DATE type column on where statement如何在 where 语句的 DATE 类型列中处理 NULL 值
【发布时间】: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


【解决方案1】:

如果我没记错的话,您想检查具有特定 luid 的每一行的 Date 列是否存在。

继续我的公共 bigquery 数据示例,我相信您想要类似的内容:

SELECT load_id,report_date IS NOT NULL as date
FROM `bigquery-public-data.austin_waste.waste_and_diversion` as p
limit 1000

对于特定的 luid,在您的情况下类似于

"""SELECT luid,cv_date IS NOT NULL as date
FROM `<project-id>.conversion_log.conversion_log_2020*` as p
where p.luid = '{}' 
limit 1000""".format(request_luid)

【讨论】:

  • 感谢您的建议。正如您所建议的那样,我再次尝试使用 IS NOT NULL 并且效果很好。实际上,我不确定为什么它以前无法使用我现在使用的相同代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多