如何在Impala中连接条件函数中的字符串和整数



hive

select concat("Positive", 123);
Positive123
select if("Positive" in ('Negative', 'No', 'Sub-zero'), 123, concat("Positive",123));
Positive123

但在Impala:中

select concat("Positive", 123);
AnalysisException: No matching function with signature: concat(STRING, TINYINT).

使用CAST作品:

select concat("Positive", cast(123 as string));
Positive123

但是

select if("Positive" in ('Negative', 'No', 'Sub-zero'),
123,
concat("Positive", cast(123 as string))
);
AnalysisException: No matching function with signature: if(BOOLEAN, TINYINT, STRING).

如果在Impala中,我如何在条件函数内连接字符串和整数?

这就是您所面临的错误。

没有带签名的匹配函数:if(BOOLEAN,TINYINT,STRING(。

您需要将所有内容转换为一种类似字符串的数据类型。所以,解决方案是将真正的大小写也转换为字符串
下面是如何重写SQL。

select if("Positive" in ('Negative', 'No', 'Sub-zero'),
cast(123 as string),  -- cast the true case to string.
concat("Positive", cast(123 as string))
);

Impala在自动转换数据类型方面非常糟糕。

最新更新