Hive解析异常排查:提取最后更新时间SQL编译报错
解决Hive SQL解析报错的问题
这个报错是因为你在CASE语句的字符串拼接逻辑里,没有正确转义单引号,导致Hive无法正确解析SQL语法。
错误原因分析
在你的SQL片段中,CASE分支里用concat拼接的SQL字符串内部,TO_DATE函数的参数使用了单引号(比如'01-01-1970 00:00:00'),但这些单引号嵌套在外层的单引号(包裹整个concat内容的单引号)里,Hive会把中间的单引号误判为字符串的结束标记,从而抛出ParseException。
修正后的SQL片段
把字符串内部的单引号替换为两个连续的单引号('')来转义,修正后的代码如下:
select cast(10000 as int), case data_type when 'TIMESTAMP' then concat(' ,cast((cast(sys_extract_utc(update_time) AS DATE) - TO_DATE(''01-01-1970 00:00:00'', ''DD-MM-YYYY HH24:MI:SS'')) * 86400 + unix_timestamp(substr(cast(sys_extract_utc(update_time) AS string), 12)) as bigint) update_time') -- 这里可以补充你的其他CASE分支逻辑 end from your_table;
补充说明
Hive和大多数SQL方言一样,当需要在单引号包裹的字符串内部表示一个单引号时,必须使用两个连续的单引号进行转义。这样SQL解析器才能准确识别字符串的起始和结束位置,避免语法解析错误。
内容的提问来源于stack exchange,提问作者Adithya Sajjanam
相关产品推荐
相关产品推荐

