Hive不会将手动创建的文件夹识别为分区

时间:2016-07-30 01:11:36

标签: hive

我进行了一项实验。我有一个外部表格,按年,月,日,小时划分。如果我使用INSERT OVERWRITE并指定要转到的数据的某个分区,它最终会创建适当的文件夹结构。 e.g。

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查询,则hive不会在手动创建的文件夹中返回数据。在结构方面,我确保手动创建的文件夹看起来与自动创建的文件夹完全相同,在每个层次结构中都有0大小的文件。是因为每当我们将数据插入特定分区时,Hive会创建(如果它不存在)该分区并将分区信息存储在其Metastore中?因为如果我手动创建文件夹结构,这是唯一可以绕过的东西。

1 个答案:

答案 0 :(得分:0)

我刚刚发现只是通过手动创建文件夹不会让Hive开始将其视为分区。我必须使用ALTER TABLE ADD PARTITION语句强制Hive将其视为分区: -

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

在此之后,如果我在表格上激活select语句,我可以在该文件夹位置看到手动创建的数据。