Spark SQL执行报mismatched input 'from' expecting <EOF>错误咨询
报错含义解释
这是Spark SQL的语法解析错误,指SQL语句解析到第19行第14个字符位置时,解析器遇到了from关键字,但此时解析器判定前面的语句应该已经结束、期待遇到结束符,因此抛出语法不匹配异常。
错误点定位
问题出在WHERE条件的BETWEEN用法上,现有写法不符合Spark SQL规范:
BETWEEN关键字后不需要加括号包裹取值范围BETWEEN的上下界需要用AND连接,不能用逗号分隔
你现有代码的WHERE子句存在语法错误,导致SQL解析提前中断,遇到后续的from关键字就抛出了匹配异常:
where t1.dt_mvtc between({data_inicial} , {data_final})
修正方案
把WHERE条件改为正确的BETWEEN写法即可:
where t1.dt_mvtc between {data_inicial} and {data_final}
如果data_inicial、data_final是字符串类型的日期值,还需要给变量加上单引号包裹,避免语法错误:
where t1.dt_mvtc between '{data_inicial}' and '{data_final}'
修正后的完整代码如下:
%%spark spark.sql(f'''select t2.ANOT_PDA_PRD ,t2.VLR_PDA_PRD AS MAX_VLR_PDA ,(CASE t1.cd_gr_mdld_prd_pd WHEN 7 THEN t3.DEF_B4 WHEN 8 THEN t3.DEF_B4 WHEN 9 THEN t3.DEF_B4 WHEN 10 THEN t3.DEF_B5 WHEN 11 THEN t3.DEF_B4 WHEN 12 THEN t3.DEF_B5 WHEN 13 THEN t3.DEF_B4 WHEN 14 THEN t3.DEF_B4 WHEN 15 THEN t3.DEF_B5 WHEN 16 THEN t3.DEF_B4 WHEN 17 THEN t3.DEF_B4 WHEN 18 THEN t3.DEF_B4 WHEN 22 THEN t3.DEF_B5 ELSE 0 END) AS TMP_QUALI ,T3.ANOT_PDA_CLI from temp_vars_qlt as t1 left join temp_vars_qlt as t2 on t1.dt_mvtc = t2.dt_mvtc and t1.cd_cli = t2.cd_cli and T1.cd_gr_mdld_prd_pd=t2.cd_gr_mdld_prd_pd left join temp_vars_qlt as t3 on t1.dt_mvtc = t3.dt_mvtc and t1.cd_cli = t3.cd_cli where t1.dt_mvtc between {data_inicial} and {data_final} ''').createOrReplaceTempView("temp_safras_qlt_aux")
内容的提问来源于stack exchange,提问作者Silvio sjsj
相关产品推荐
相关产品推荐

