如何在Hive中的String数据类型以外的列中插入空白值而不是NULL

时间:2019-03-18 06:40:37

标签: hadoop hive

我有一条类似的创建语句

  

创建表temp_tbl(EmpId字符串,Salary int);

我想在表中插入一个员工ID和一个空白值。

所以我要做的是

  1. 插入覆盖表temp_tbl选择'013'作为EmpId,''作为tbl的薪水;
hive> select * from temp_tbl;
OK
013     NULL

但预期结果是

hive> select * from temp_tbl;
OK
013     NULL ---> Blank instead of NULL
  1. 也尝试使用“”。还是我将其作为NULL而不是空白

3。尝试创建具有序列化属性的表

CREATE TABLE temp_tbl (EmpId String,Salary int) TBLPROPERTIES ('serialization.null.format' = '');

那也没有将NULL值更改为空白。

相同的解决方法是什么。

3 个答案:

答案 0 :(得分:0)

选择数据时的用例。

Select 
(CASE 
       WHEN columnName is null THEN ''
       ELSE columnName 
END) as 'Result' from temp_tbl;

答案 1 :(得分:0)

在Hive中,除了字符串/ varchar / char和某些复杂类型(如数组)以外的所有类型不能为空,只能为NULL。空字符串Package Parameter是String类型的正常值。您也可以产生空的array()(零尺寸的数组)。

一种解决方法,您可以使用数据中通常不包含的一些预定义值来表示某些特殊数值,例如-99999。或者,您可以将数字值存储在“字符串”列中,在这种情况下,您将可以在其中包含空值。但是不可能为数字类型分配(投射)空字符串,因为不允许使用这种空值。

如果尝试将空字符串分配给数字列或强制转换为数字类型,则结果将与将非数字字符串转换为数字-NULL相同(在Hive中,如果无法强制转换,则返回NULL )或使用Java获得java.lang.NumberFormatException

答案 2 :(得分:0)

知道数据类型Int可以是NULL或整数,我会考虑如何解决该问题。

  1. 我的印象是0可以胜任。为什么不能呢?
  2. 如果1不理想,为什么不创建一个新的temp_employees_with_no_salary表?
  3. 如果2不理想,您可以负担得起将temp_tbl.Salary的数据类型从Int更改为String,然后使用CAST(Salary AS INT)进行处理吗?