hive使用动态分区时如果动态分区的字段存在空值的问题

Posted vanwoos

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive使用动态分区时如果动态分区的字段存在空值的问题相关的知识,希望对你有一定的参考价值。

hive的数据是放到hdfs中,当我们的分区字段类型为string时,如果使用动态分区向表中插入数据,而动态分区的那个字段恰好为null或者空字符串,这样hive会为其选一个默认的分区,我们查数据时分区字段的值也是这个默认分区的名,默认名为 __HIVE_DEFAULT_PARTITION__,这个默认分区的名称在配置hive时是可配置的。

 

如果分区字段的类型为int,这里就有四点疑问:

1. 分区字段的值为null或者空字符串时,hive的数据是什么样,hdfs的目录结构什么样?

2. 分区字段的值为非空格的字符串时,hive的数据什么样,hdfs的目录结构什么样?

3. 分区字段的值为小数时,hive的数据什么样,hdfs的目录结构什么样?

4. 分区字段的值为空格时,hive的数据什么样,hdfs的目录结构什么样?

 

以下把尝试结果给出来:

1. hive中查到分区字段值为null,hdfs是pt=__HIVE_DEFAULT_PARTITION__

2. hive中查到分区字段值为动态分区时的字符串,hdfs是pt=动态分区时的字符串

3. hive中查到分区字段值为null,hdfs是pt=__HIVE_DEFAULT_PARTITION__

4. hive中查到分区字段值为null,hdfs是pt=空格

 

综上,hdfs的目录结构会把null和空字符串变成pt=__HIVE_DEFAULT_PARTITION__的形式。

hive会把解析不成整数的值都用null代替。

有关hive动态分区的说明见apache的wiki。

 

以上是关于hive使用动态分区时如果动态分区的字段存在空值的问题的主要内容,如果未能解决你的问题,请参考以下文章

Hive动态分区

Hive动态分区

Hive分区表简介

Hive分区表动态添加字段

Hive表的动态分区和静态分区

Hive分区(静态分区+动态分区)