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