即使在蜂巢中使用合并后也看到null

时间:2018-07-18 18:34:02

标签: hive hiveql

即使使用

,我在目标表中也得到空值
coalesce(x.coulmn, 0) 

在加载数据时。列是smallint数据类型。请让我知道是否有人遇到过此类问题。

coalesce(cntdim.epsd_ind, 0) as epsd_ind 

这应该返回0或1,但我在目标中得到的是空值。

1 个答案:

答案 0 :(得分:1)

当输入数据无法转换为目标数据类型时,遇到了同样的问题。 当无法转换时,Hive在插入过程中将其静默转换为NULL。为了避免这种情况,请使用cast()应用显式转换:

coalesce(cast(x.coulmn as smallint), 0) 

在这种情况下,如果无法将值转换为smallint,则强制转换将返回NULLcoalesce将返回0。或使用其他方式来确保您插入的数据完全兼容或相同。

如果没有cast(),如果x.column不为null且不能转换为smallint,则coalesce将返回值,并将value插入为NULL:

coalesce(x.coulmn, 0)

将字符串插入DATE列时,可以观察到类似问题。如果字符串格式错误,例如'2017-01-010000',它将毫无例外地转换为NULL。有趣的是,在Hive 1.2.x中插入bigint的{​​{1}}被截断以适应int,而不是转换为null。