hive使用動態分區時如果動態分區的字段存在空值的問題
阿新 • • 發佈:2018-08-25
名稱 目錄結構 問題 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使用動態分區時如果動態分區的字段存在空值的問題