HIVE 外部表 - 将空字符串设置为 NULL

Posted

技术标签:

【中文标题】HIVE 外部表 - 将空字符串设置为 NULL【英文标题】:HIVE External Table - Set Empty Strings to NULL 【发布时间】:2013-10-21 22:52:08 【问题描述】:

目前我在 Amazon EMR 上有一个 HIVE 0.7 实例。我正在尝试使用 Hive 0.11 在新的 EMR 集群上创建此实例的副本。

在我的 0.7 实例中,我有一个将空字符串设置为 NULL 的外部表。这是我创建表的方式:

CREATE EXTERNAL TABLE IF NOT EXISTS tablename
(column1 string,
column2 string)
PARTITIONED BY (year STRING, month STRING, day STRING)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'
TBLPROPERTIES ('serialization.null.format' = '');

数据是这样添加到表中的:

ALTER TABLE tablename 
ADD PARTITION (year = '2013', month = '10', day='01')
LOCATION '/location_in_hdfs';

这在 0.7 中效果很好,但在 0.11 中似乎没有将我的空字符串评估为 NULLS。有趣的是,创建具有相同数据和表定义的普通表似乎将空字符串评估为预期的 NULL。

在 0.11 中有不同的方法可以使用外部表吗?

【问题讨论】:

【参考方案1】:

Hive 默认分区属性覆盖表属性。在您的 alter 语句中包含 SERDE 属性:

ALTER TABLE tablename  ADD PARTITION (year = '2013', month = '10', day='01') SET  
SERDEPROPERTIES ('serialization.null.format' = '');

【讨论】:

以上是关于HIVE 外部表 - 将空字符串设置为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

Hive--对空值和NULL的处理

hive的空字符串与null

可选的外键应该是 NULL 还是应该指向一个空字符串

HIVE踩坑——NULL和空字符串处理

如何设置TextBox空字符串的默认值而不是null

mysql非空字段不允许插入空字符串怎么处理?