在 hive 中为 char(1) 和 varcar(2) 处理 null

问题描述

我正在 hive 中读取一个平面文件,我的文件中有空值,如下所示

a|b|null|null|d

当我使用以下数据类型在此之上创建表时

a char(1),b char(1),c char(1),varchar2(2),char(1)

表中的值是这样的

a,b,n,nu,d

我可以这样做的一种方法是将数据类型设为 varchar2(4) 并在 null 添加检查。 但是有没有其他方法可以做到这一点。

解决方法

SerDe 将 'null' 字符串视为普通值,值 'a' 和 'null' 之间没有区别。

尝试将 'serialization.null.format'='null' 属性添加到您的表定义中:

ALTER TABLE mytable SET tblproperties('serialization.null.format'='null');

另一种方法是使用 STRING 数据类型并且 case 语句是 select:

select case when col = 'null' then null end as col
       ...