COALESCE与Hive SQL

时间:2012-11-19 20:13:17

标签: sql hive

由于Hive上不支持IFNULLISNULLNVL功能,因此我无法将NULL转换为0.我尝试了COALESCE(*column name*, 0)但收到了以下错误消息:

  

参数类型不匹配0:COALESCE之后的表达式应该全部   具有相同的类型:“bigint”是预期的,但找到“int”

如何解决这个问题?

7 个答案:

答案 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)

来自Language DDL & UDF of Hive

NVL(value, default value) 

如果value为null则返回默认值,否则返回值

答案 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

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-ConditionalFunctions

答案 6 :(得分:1)

nvl(value,defaultvalue) as Columnname

会将缺失值设置为defaultvalue指定的