两个查询的 Hive 联合给出编译错误

Posted

技术标签:

【中文标题】两个查询的 Hive 联合给出编译错误【英文标题】:Hive Union of two queries is giving compile error 【发布时间】:2021-08-11 16:18:06 【问题描述】:

我不确定跟随 hive 查询有什么问题。但是,它会抛出错误。

select h.database_name, h.table_name, h.frequency as hive_frequency, i.frequency as impala_frequency    
from hive_access_frequency h
left join impala_access_frequency i
on 
h.database_name = i.database_name and 
h.table_name = i.table_name
union
select i.database_name, i.table_name, h.frequency as hive_frequency, i.frequency as impala_frequency    
from impala_access_frequency i
left join hive_access_frequency h
on 
h.database_name = i.database_name and 
h.table_name = i.table_name

我可以单独运行此查询。但是,在使用 union 运行时遇到问题

错误

Error: Error while compiling statement: FAILED: ParseException line 8:0 missing ALL at 'select' near '<EOF>' (state=42000,code=40000)

【问题讨论】:

【参考方案1】:

Hive versions prior to 1.2.0 only support UNION ALL

解决方法:使用 UNION ALL 代替 UNION,将所有内容包装到子查询中并应用 distinct

select DISTINCT <column_list>
from
(
select ...
UNION ALL
select ...
)s;

UNION 等同于 UNION ALL + DISTINCT

【讨论】:

以上是关于两个查询的 Hive 联合给出编译错误的主要内容,如果未能解决你的问题,请参考以下文章

HIVE JOIN 两个具有不同行数的表给出错误的列值

编译错误:请求非结构或联合中的成员

C++ 类查询错误:“”左侧必须指向类/结构/联合

Hive 中的 ParseExection 错误

编译时在非结构或联合中获取成员“indexPath”的错误请求

SQL 编译错误:无法评估不受支持的子查询类型 - SELECT 子句中的函数调用