2016-03-06 115 views
0

我有一个map reduce作业,它已经使用hive分区命名约定将记录写出到hdfs。Hive外部表无法读取已分区的hdfs目录

/user/test/generated/code=1/channel=A 
/user/test/generated/code=1/channel=B 

我创建外部表后,没有看到该分区。

create external table test_1 (id string, name string) partitioned by 
(code string, channel string) STORED AS PARQUET LOCATION 
'/user/test/generated' 

即使alter命令

ALTER TABLE TEST_1 ADD PARTITION(码= '1',频道= 'A')

,它不会看到分区或记录,因为

SELECT * FROM TEST_1极限1产生0的结果。

如果我使用空位置,当我创建外部表,然后用 负载数据INPATH ... 然后它工作。但问题在于负载数据inpath的分区太多而无法正常工作。

有没有办法让配置单元自动识别分区(没有做插入查询)?

回答

3

使用msck,它似乎工作。但我必须退出蜂巢会话,然后重新连接。

MSCK REPAIR TABLE test_1 
+0

天才!!谢谢,有这个确切的问题。对于未来的人来说,OP在这个问题上所做的手动修改命令是没有必要的。只需按照惯例设置目录,创建表格并运行此修复命令。 – Milimetric