select
a.time, b.name, c.user_city,
case
when c.user_country='xxxx' and c.user_state in (select cast(state_id as string) from states_list)
then (select d.STATE_NAME from States_LIST d where d.STATE_ID = cast(c.user_state as int) )
else c.user_state
end state,
case
when c.user_country in (select cast(COUNTRY_ID as string) from COUNTRIES_LIST)
then (select e.COUNTRY_NAME from COUNTRIES_LIST e where e.COUNTRY_ID = cast(c.user_country as int))
else null
end country, col6, col7, ......
from ......
where.......
在impala中执行上述查询时,我遇到以下错误:
不兼容的返回类型表达式“select d.state\u name from states\u list d where d.state\u id=cast(c.user\u state as int)”和“c.user\u state”的数组和字符串
请帮忙!!!!
1条答案
按热度按时间3mpgtkmj1#
如错误消息所示,您试图在同一个案例中同时分配字符串和数组。因此,case语句只能在子查询只有一个输出的情况下工作。
为此,您需要一个标量子查询。根据需要解决的问题,可以尝试使用聚合函数。
来自impala文件:
标量子查询生成一个结果集,其中一行包含一列,通常由聚合函数(如max()或sum()生成)
第二个原因是impala不允许在select子句中使用子查询。
子查询可以返回一个结果集,以便在from或with子句中使用,或与in或exists等运算符一起使用。
根据您的表,您必须通过加入
d
以及e
表,因此子查询的需求消失了。例子:请让我知道其中一个是否解决了你的问题。