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

AKC*_*AKC 2 hadoop hive hiveql

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

TBLPROPERTIES('serialization.null.format'=''
Run Code Online (Sandbox Code Playgroud)

为了测试功能,我创建了一个表并在字段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;**
Run Code Online (Sandbox Code Playgroud)

最后一条语句未返回任何行。但我期望所有行都将返回,因为field3中有空白字符串。

Dav*_*itz 5

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

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

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

演示版

重击

hdfs dfs -mkdir /user/hive/warehouse/mytable
echo Hello,,World | hdfs dfs -put - /user/hive/warehouse/mytable/data.txt
Run Code Online (Sandbox Code Playgroud)

蜂巢

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