在Hive中,空字符串不被视为null

时间:2017-04-06 18:25:24

标签: hadoop hive hiveql

我对以下语句的理解是,如果在hive列​​中插入空字符串或空字符串,则将其视为null。

TBLPROPERTIES('serialization.null.format'=''

为了测试我已经创建了一个表并向字段3插入''的功能。当我在field3上查询空值时,没有符合该标准的行。

我的理解是将空字符串设为null吗?

CREATE TABLE CDR
(
field1                 string,
field2                 string,
field3                 string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
**TBLPROPERTIES('serialization.null.format'='');**

insert overwrite table emmtest.cdr select **field1,field2,''** from emmtest.cdr_non_orc;

select * from emmtest.cdr where **field3 is null;**

最后一个语句没有返回任何行。但我希望返回所有行,因为field3中有空字符串。

2 个答案:

答案 0 :(得分:4)

TBLPROPERTIES('serialization.null.format'='')表示以下内容:

  • 查询表
  • 时,数据文件中的空字段将被视为NULL
  • 向表中插入行时,NULL值将作为空字段写入数据文件

你正在做别的事情 -
您正在从查询中向表中插入空字符串 它被“按原样”处理 - 一个空字符串。

演示

<强>的bash

hdfs dfs -mkdir /user/hive/warehouse/mytable
echo Hello,,World | hdfs dfs -put - /user/hive/warehouse/mytable/data.txt

<强>蜂房

create table mytable (s1 string,s2 string,s3 string) 
row format delimited 
fields terminated by ','
;
hive> select * from mytable;
OK
s1  s2  s3
Hello       World
hive> alter table mytable set tblproperties ('serialization.null.format'='');
OK
hive> select * from mytable;
OK
s1  s2  s3
Hello   NULL    World

答案 1 :(得分:1)

您可以在Hive Query属性中使用以下内容:

NULL DEFINED AS ''

或引号内的任何字符。