33

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

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

如何解决这个问题?

4

7 回答 7

47

Hive从 0.8 版本开始支持 bigint 文字。所以,额外的“L”就足够了:

COALESCE(column, 0L)
于 2013-01-14T12:16:38.923 回答
26

正如 Lamak 在评论中指出的那样,COALESCE(column, CAST(0 AS BIGINT))解决了错误。

于 2012-11-19T20:34:54.673 回答
6

由于0.11 hive有 NVL 功能 nvl(T value, T default_value)

它说 如果值为空则返回默认值否则返回值

于 2015-07-21T07:09:12.030 回答
5

来自 [Hive 语言手册][1]:

合并 (T v1, T v2, ...)

将返回第一个不为 NULL 的值,如果所有值都为 NULL,则返回 NULL

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

于 2013-05-21T23:32:25.353 回答
4

如果客户的主要联系媒介是电子邮件,如果电子邮件为空则为电话号码,如果电话号码也为空则为地址。它将使用 COALESCE 编写为

coalesce(email,phonenumber,address) 

而在 hive 中也可以通过将 nvl 链接在一起来实现

nvl(email,nvl(phonenumber,nvl(address,'n/a')))
于 2017-07-10T16:47:52.040 回答
3

来自Hive 的 Language DDL & UDF

NVL(value, default value) 

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

于 2016-08-23T03:43:29.397 回答
2
nvl(value,defaultvalue) as Columnname

将缺失值设置为指定的默认值

于 2016-11-02T17:49:00.003 回答