我有一个create语句
创建表temp\u tbl(empid string,salary int);
我想在表中插入一个雇员id和一个空值。
所以我所做的就是
insert overwrite table temp\u tbl选择“013”作为empid,“salary from tbl”;
hive> select * from temp_tbl;
OK
013 NULL
但预期的结果是
hive> select * from temp_tbl;
OK
013 NULL ---> Blank instead of NULL
也用“”尝试过。我还是把它改成空的
3.尝试创建具有序列化属性的表
CREATE TABLE temp_tbl (EmpId String,Salary int) TBLPROPERTIES ('serialization.null.format' = '');
这也没有改变空值为空。
同样的解决方法是什么。
3条答案
按热度按时间smdncfj31#
选择数据时的用例。
cyej8jka2#
知道数据类型int可以是null或integer,我会考虑如何解决这个问题。
我的印象是0可以胜任这项工作。为什么不能呢?
如果1不是理想值,为什么不创建一个新的临时员工工资表?
如果2不理想,您能否将temp\u tbl.salary的数据类型从int更改为string,然后使用cast(salary as int)来处理它?
pxy2qtax3#
在配置单元中,除了strings/varchar/char和一些复杂类型(如array)之外的所有类型都不能为空,只能为null。空字符串
''
是字符串类型的正常值。也可以生成空数组()(大小为零的数组)。作为解决方法,您可以使用一些数据中通常不存在的预定义值来表示一些特殊的数值,如-99999。或者,您可以将数值存储在字符串列中,在这种情况下,您可以在其中包含空值。但是不能将空字符串赋给(强制转换)数字类型,因为这样的空值是不允许的。
如果尝试将空字符串指定给数值列或强制转换为数值类型,则结果将与将非数值字符串转换为numeric-null(在配置单元中,如果无法强制转换,则返回null)或在java中获取java.lang.numberformatexception相同。