Hive子查询报错:无法识别where rownum = 语法,请求技术支持
解决Hive中ParseException: cannot recognize input near 'where' 'rownum' '='的问题
错误原因
Hive不支持Oracle风格的rownum语法,你在子查询里写的where rownum = ...是Oracle专属写法,Hive的SQL解析器无法识别该语法,因此抛出解析异常。
解决方案
用Hive支持的**窗口函数row_number()**替代rownum,以下是具体示例:
错误写法(Oracle风格,Hive不兼容)
select * from ( select id, name from user_info where rownum = 1 ) sub;
正确写法(使用row_number())
select id, name from ( select id, name, row_number() over() as rn from user_info ) sub where sub.rn = 1;
如果需要按特定字段排序后取指定行,比如按create_time倒序取最新的一条数据:
select id, name from ( select id, name, create_time, row_number() over(order by create_time desc) as rn from user_info ) sub where sub.rn = 1;
简化场景:取前N条数据
如果只是想获取前N条数据,无需子查询的话,直接用Hive的limit关键字更简洁:
select id, name from user_info limit 1;
内容的提问来源于stack exchange,提问作者srinivasulu thuppukonda
相关产品推荐
相关产品推荐

