【问题标题】:Empty String is not treated as null in Hive空字符串在 Hive 中不被视为 null
【发布时间】:2020-07-21 01:24:17
【问题描述】:

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

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

为了测试功能,我创建了一个表并在字段 3 中插入​​了“”。当我在字段 3 上查询空值时,没有符合该条件的行。

我对使空白字符串为空的理解正确吗??

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 中有空白字符串。

【问题讨论】:

  • 空字符串永远不会等于 null。 field3='' 将返回这些行。
  • 如何在 Hive 中将空字符串设为 null?这个参数是什么意思? - TBLPROPERTIES('serialization.null.format'='')

标签: hadoop hive hiveql


【解决方案1】:

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

蜂巢

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

【讨论】:

  • 谢谢...我如何在 Hive 中将空字符串设为 null?
  • 与 Oracle 不同,包括 Hive 在内的其他数据库引擎不会将空字符串视为 NULL。但是,您可以使用 nullif(mycolumn,'')(从 Hive 2.2.0 开始)或 case when mycolumn <> '' then mycolumn end
  • 谢谢嘟嘟澄清我的问题。
  • 此属性是否也适用于兽人表?我有一个源表,我在该表上运行“从性别为空的源中选择 *”并给出结果。我已经使用上述查询将行从源插入到目标,作为“插入目标选择 * 从源中性别为空”。但是在目标中插入的行的性别为''并且查询“从性别为空的目标中选择*”显示0计数,而“从性别=的目标中选择*”显示与源完全相同的计数。源表和目标表都是ORC。请澄清。
  • @rahulgulati,发布一个带有可重现场景的问题。无论如何,我怀疑serialization.null.format 会对文本文件以外的任何文件格式产生任何影响。
【解决方案2】:

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

NULL DEFINED AS ''

或引号内的任何字符。

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多