即使使用
,我在目标表中也得到空值coalesce(x.coulmn, 0)
在加载数据时。列是smallint
数据类型。请让我知道是否有人遇到过此类问题。
coalesce(cntdim.epsd_ind, 0) as epsd_ind
这应该返回0或1,但我在目标中得到的是空值。
答案 0 :(得分:1)
当输入数据无法转换为目标数据类型时,遇到了同样的问题。 当无法转换时,Hive在插入过程中将其静默转换为NULL。为了避免这种情况,请使用cast()应用显式转换:
coalesce(cast(x.coulmn as smallint), 0)
在这种情况下,如果无法将值转换为smallint
,则强制转换将返回NULL
,coalesce
将返回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。