1. 程式人生 > >hive使用動態分區時如果動態分區的字段存在空值的問題

hive使用動態分區時如果動態分區的字段存在空值的問題

名稱 目錄結構 問題 def 分區 art str hdf part

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使用動態分區時如果動態分區的字段存在空值的問題