如何转换' \ N'使用Hive清空字符串的字符

时间:2017-03-03 03:36:46

标签: hadoop hive

我有一张带有字段' str的表。 我跑的时候

select str from mytable where str is null 

它打印为null。但是当我跑步时:

INSERT OVERWRITE LOCAL DIRECTORY "/path/to/dir" 
select str from mytable where str is null; 

有' \ N '

中的字符
  

" /路径/到/ DIR"

我想知道是否有办法改变' \ N'将结果写入本地文件时,字符为空字符串。

4 个答案:

答案 0 :(得分:2)

演示@AshishSingh回答

<强>蜂房

create table mytable (i int,j int,k int);
insert into mytable values (1,2,null),(null,5,null),(7,null,9);

select * from mytable
;
+-----------+-----------+-----------+
| mytable.i | mytable.j | mytable.k |
+-----------+-----------+-----------+
| 1         | 2         | NULL      |
| NULL      | 5         | NULL      |
| 7         | NULL      | 9         |
+-----------+-----------+-----------+
insert overwrite local directory "/tmp/mytable" 
row format delimited fields terminated by "," null defined as '' 
select * from mytable
;

<强>的bash

cat /tmp/mytable/*
1,2,
,5,
7,,9

答案 1 :(得分:1)

使用: -

  INSERT OVERWRITE LOCAL DIRECTORY "/path/to/dir" 
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" NULL DEFINED AS '' 
select str from mytable where str is null;

如果不需要,您可以删除FIELDS TERMINATED BY "\t"

答案 2 :(得分:0)

好吧,你总是可以使用CASE-WHEN语句:

SELECT CASE WHEN str is null then '' ELSE str END;

请记住,您可以使用此表属性更改处理空字段的方式:

  

“serialization.null.format”

答案 3 :(得分:0)

是的,需要小改动。您查询始终返回client_secret结果,因此直接将null放入文件。

" " (empty string)