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中?因为如果我手动创建文件夹结构,这是唯一可以绕过的东西。
答案 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语句,我可以在该文件夹位置看到手动创建的数据。