由于Hive上不支持IFNULL
,ISNULL
或NVL
功能,因此我无法将NULL转换为0.我尝试了COALESCE(*column name*, 0)
但收到了以下错误消息:
参数类型不匹配0:COALESCE之后的表达式应该全部 具有相同的类型:“bigint”是预期的,但找到“int”
如何解决这个问题?
答案 0 :(得分:40)
Hive支持bigint literal since 0.8 version。所以,额外的“L”就足够了:
COALESCE(column, 0L)
答案 1 :(得分:21)
正如喇嘛在评论中指出的那样,COALESCE(column, CAST(0 AS BIGINT))
可以解决错误。
答案 2 :(得分:5)
由于0.11 hive具有NVL功能
nvl(T value, T default_value)
说 如果value为null则返回默认值,否则返回值
答案 3 :(得分:2)
答案 4 :(得分:2)
如果客户主要联系媒体是电子邮件,如果电子邮件为空,则为phonenumber,如果phonenumber也为null,则为地址。它将使用COALESCE编写为
coalesce(email,phonenumber,address)
虽然可以通过将nvl链接在一起来实现hive中的相同
nvl(email,nvl(phonenumber,nvl(address,'n/a')))
答案 5 :(得分:1)
来自[Hive语言手册] [1]:
COALESCE(T v1,T v2,...)
将返回非NULL的第一个值,如果所有值都为NULL,则返回NULL
答案 6 :(得分:1)
nvl(value,defaultvalue) as Columnname
会将缺失值设置为defaultvalue指定的