Spark SQL解析报错:输入不匹配期望{<EOF>, ';'}的问题求助
Spark SQL解析错误原因及修复方案
你的SQL存在括号不匹配的语法错误,导致Spark解析器无法正确识别语句结构,从而抛出mismatched input 'BirthYear' expecting {, ';'}错误。
具体错误分析
看第一个CASE的第二个WHEN语句:
WHEN TRYCAST(CONCAT(CAST(BirthYear AS string), '-', CAST(BirthMonth AS string), '-', CAST(BirthDay AS string) AS DATE FORMAT 'YYYY-MM-DD')) IS NOT NULL THEN ...
这里CONCAT()函数的括号未闭合——你在CAST(BirthDay AS string)之后直接写了AS DATE FORMAT 'YYYY-MM-DD',但CONCAT的参数列表还未结束(缺少闭合括号),解析器因此无法正确解析后续内容,触发语法报错。
另外还有两处细节问题:
- 同一个WHEN里的第二个
CONCAT错误重复了CAST(BirthMonth AS string),应该替换为CAST(BirthYear AS string) - 第二个CASE语句中的
TRYCAST也存在完全相同的括号不匹配问题
修复后的完整SQL
select TransactionID as txn_id, Message as msg_txt, Source as src_sys, Firstname as indv_frst_nm, Middlename as indv_mdl_nm, Lastname as indv_last_nm, CASE WHEN BirthYear IS NULL OR BirthMonth IS NULL OR BirthDay IS NULL THEN '' WHEN TRYCAST(CONCAT(CAST(BirthYear AS string), '-', CAST(BirthMonth AS string), '-', CAST(BirthDay AS string)) AS DATE FORMAT 'YYYY-MM-DD') IS NOT NULL THEN CAST(TRYCAST(CONCAT(CAST(BirthYear AS string), '-', CAST(BirthMonth AS string), '-', CAST(BirthDay AS string)) AS DATE FORMAT 'YYYY-MM-DD') AS string) ELSE '9999-12-31' END AS indv_brth_dt, DecisionCode as dcsn_cd, tddate as td_dt, RUN_ID as run_id, AuthorizedRepAddressCounty as auth_rep_verf_ad_cnty_nm, CASE WHEN TRYCAST(CONCAT(CAST(AuthorizedRepYearOfBirth AS string), '-', CAST(AuthorizedRepMonthOfBirth AS string), '-', CAST(AuthorizedRepDayOfBirth AS string)) AS DATE FORMAT 'YYYY-MM-DD') IS NOT NULL THEN CAST(TRYCAST(CONCAT(CAST(AuthorizedRepYearOfBirth AS string), '-', CAST(AuthorizedRepMonthOfBirth AS string), '-', CAST(AuthorizedRepDayOfBirth AS string)) AS DATE FORMAT 'YYYY-MM-DD') AS string) ELSE NULL END AS auth_rep_verf_brth_dt from table_name;
内容的提问来源于stack exchange,提问作者INeedHelp101
相关产品推荐
相关产品推荐

