Presto SQL转Hive SQL时含子查询的语句报错问题求助
Presto SQL转Hive SQL时含子查询的语句报错问题求助
兄弟,我之前也踩过Hive不支持这种WHERE子句标量子查询的坑!给你两个能解决问题的靠谱写法,都是Hive友好的:
方案一:用JOIN替代子查询
把获取最大load_date的逻辑做成临时表,再和主表关联,Hive就能正常解析了:
SELECT DISTINCT a.id FROM account a JOIN ( SELECT MAX(load_date) AS max_load_date FROM account ) b ON a.load_date = b.max_load_date WHERE a.account_status='current' AND a.account_type='crnt'
方案二:使用窗口函数(更灵活)
如果之后需要扩展逻辑,比如要每个id对应最新加载日期的记录,窗口函数会更顺手,还能顺带完成去重需求:
SELECT id FROM ( SELECT id, ROW_NUMBER() OVER (PARTITION BY id ORDER BY load_date DESC) AS rn FROM account WHERE account_status='current' AND account_type='crnt' ) t WHERE rn = 1
为啥原语句会报错?
Hive(尤其是早期版本)对WHERE子句里直接嵌套的标量子查询支持有限,而JOIN或者窗口函数是Hive原生支持的写法,执行效率也更稳定。
备注:内容来源于stack exchange,提问作者vvazza
相关产品推荐
相关产品推荐

