在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在自动转换数据类型方面非常糟糕。