Databricks中Case语句执行报错求助:当前日期判断语法问题
Databricks Spark SQL日期对比Case语句修正方案
你遇到的问题是**date.now()是Python语法,无法在Spark SQL语句中直接使用**,Spark SQL有专属的日期函数,以下是几种可行的解决方法:
方法1:使用Spark SQL内置的current_date()函数
current_date()会返回当前系统日期(仅日期部分,格式为yyyy-MM-dd),适合和日期类型的StartDate字段对比:
salesforce_df = spark.sql(""" SELECT CASE WHEN StartDate = current_date() THEN True ELSE False END as conversion FROM Tablename; """)
方法2:处理带时间戳的StartDate字段
如果StartDate是包含时分秒的时间戳类型,需要先将其截断到日期维度再对比:
方式A:用date_trunc()截断到天
salesforce_df = spark.sql(""" SELECT CASE WHEN date_trunc('day', StartDate) = current_date() THEN True ELSE False END as conversion FROM Tablename; """)
方式B:将StartDate转换为日期类型
salesforce_df = spark.sql(""" SELECT CASE WHEN StartDate CAST(date) = current_date() THEN True ELSE False END as conversion FROM Tablename; """)
方法3:Python侧获取日期后传入SQL(更灵活)
先在Python中拿到当前日期,再通过字符串格式化或参数绑定传入SQL:
字符串格式化方式(注意SQL注入风险)
from datetime import date current_date_str = date.today().strftime("%Y-%m-%d") salesforce_df = spark.sql(f""" SELECT CASE WHEN StartDate = '{current_date_str}' THEN True ELSE False END as conversion FROM Tablename; """)
参数绑定方式(更安全)
用Spark DataFrame API替代SQL,避免SQL注入问题:
from datetime import date from pyspark.sql.functions import col, lit current_date = date.today() salesforce_df = spark.table("Tablename").withColumn( "conversion", (col("StartDate") == lit(current_date)).cast("boolean") )
内容的提问来源于stack exchange,提问作者Rohit Kulkarni
相关产品推荐
相关产品推荐

