如何消除hdfs中hive文件中的\ N?

时间:2017-02-28 07:58:48

标签: hive hdfs hiveql

我在hive表中加载数据,有些列是空的,而我在hive中查看表显示为null。 当我在路径/ apps / hive / warehouse / dbname / file-name中下载HDFS中的数据时。 在下载的文件中有\ N值而不是null。 如何在我的文件中消除\ N值为空。 而且我想以XLSX格式保存我的文件

1 个答案:

答案 0 :(得分:2)

tblproperties ('serialization.null.format' = '')

演示

hive> create table t1 (i int,j int,k int);
hive> insert into t1 values (1,null,2);
hive> select * from t1;
+------+------+------+
| t1.i | t1.j | t1.k |
+------+------+------+
|    1 | NULL |    2 |
+------+------+------+
$ hdfs dfs -cat /user/hive/warehouse/t1/* | od -Anone -tacd1x1

    1  soh    \    N  soh    2   nl     # a  = named characters         
    1  001    \    N  001    2   \n     # c  = ASCII characters or backslash escapes
   49    1   92   78    1   50   10     # d1 = decimal     (1-byte)
   31   01   5c   4e   01   32   0a     # x1 = hexadecimal (1-byte)
hive> create table t2 (i int,j int,k int) tblproperties ('serialization.null.format' = '');
hive> insert into t2 values (1,null,2);
hive> select * from t2;
+------+------+------+
| t2.i | t2.j | t2.k |
+------+------+------+
|    1 | NULL |    2 |
+------+------+------+
$ hdfs dfs -cat /user/hive/warehouse/t2/* | od -Anone -tacd1x1

    1  soh  soh    2   nl       # a  = named characters
    1  001  001    2   \n       # c  = ASCII characters or backslash escapes
   49    1    1   50   10       # d1 = decimal     (1-byte)
   31   01   01   32   0a       # x1 = hexadecimal (1-byte)