You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL执行Hive兼容查询报错:mismatched input 'from'

问题排查与解决

这是Spark SQL和Hive的语法兼容性问题,两个核心点导致报错:

  • 窗口函数写法不符合Spark规范:Spark SQL对函数语法解析更严格,Row_number () 中函数名与括号之间的空格会被判定为非法,规范写法是小写的row_number()(无空格)。
  • 子查询内CTE的支持差异:旧版本Spark SQL不支持在子查询内部定义CTE(with语句),必须将CTE移到整个查询的最外层。

另外,原SQL里的日期处理可以简化:date_format返回的已经是字符串类型,无需先转整数再转回字符串,直接使用结果即可。

修改后的SQL代码如下:

with abc as(
    select appl_pcn,
           appl_corp_strct_in,
           row_number() OVER(PARTITION BY appl_pcn ORDER BY gcap_extr_dt_tm DESC) AS Recrd_rank1
    from cstonedb3.gcap_applcnt_data 
    where appl_no = 0
      and pcn_mo between date_format(add_months('2023-09-26', -2),'yyyyMM') 
                      and date_format('2023-09-26','yyyyMM')
)
select a.appl_sta,
       a.appl_pcnvendorcode,
       a.appl_pcn,
       b.appl_corp_strct_in,
       a.base_dcsn_dt,
       a.pcn_curr_cd,
       a.pcn_mo,
       case when trim(upper(b.appl_corp_strct_in)) = 'S' then 1 else 0 end as sol_ind
from lod1_aml_p2_413_gp_base a
left join (
    select * from abc where Recrd_rank1 = 1
) b on a.appl_pcn = b.appl_pcn

补充说明

Hive的SQL解析器对语法容错性更强,允许函数名带空格、子查询内定义CTE,但Spark SQL遵循更严格的ANSI SQL标准,因此会出现Hive能正常运行但Spark报错的情况。

内容的提问来源于stack exchange,提问作者Naman Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:00:19