2016-07-30 55 views
0

我進行了一項實驗。我有一個外部表,並按年,月,日,小時進行分區。如果我使用INSERT OVERWRITE併爲數據指定某個分區,它最終會創建適當的文件夾結構。例如配置單元不會將手動創建的文件夾識別爲分區

INSERT OVERWRITE TABLE default.testtable PARTITION(year = 2016, month = 7, day=29, hour=18) 
SELECT tbl.c1 FROM (select 'Test' as c1) as tbl; 

該表只有一個字符串列,但這不是很重要。

因此,上面的語句創建適當的文件夾結構。但是,如果我嘗試手動創建類似的結構並激發SELECT查詢,配置單元不會在手動創建的文件夾中返回數據。在結構方面,我確保手動創建的文件夾與每個層次結構中具有0號文件的自動創建的文件夾完全相同。是因爲每當我們將數據插入特定分區時,Hive都會創建(如果它不存在)該分區並將分區信息存儲在其Metastore中?因爲如果我手動創建文件夾結構,那是唯一會被繞過的東西。

回答

0

我剛纔發現只通過手動創建文件夾不會使Hive開始將其視爲分區。我將不得不強制使用ALTER TABLE ADD PARTITION語句蜂巢把它當作分區: -

ALTER TABLE default.testtable ADD IF NOT EXISTS PARTITION (year = 2016, month = 7, day=29, hour = 18); 

在此之後,如果我開槍表的SELECT語句,我能夠看到該文件夾​​的位置手動創建的數據。

相關問題