在路径中使用分区WITHOUT列名创建Hive外部表?

时间:2016-10-28 07:29:21

标签: hadoop hive

我需要为只读存在的文件夹结构创建一个外部表。

原始配置单元表具有年,月,日等分区。他们的文件以这种方式存储在路径中HDFS_PATH/2016/10/04/

但是当我在hive中创建一个外部表时,它总是存储到像HDFS_PATH/year=2016/month=10/day=04/

这样的路径

虽然我可以更改此链接中的1个分区位置How to Update/Drop a Hive Partition? ,但我必须为每个分区组合设置位置。

有没有更简单的方法来一劳永逸地设置它?

3 个答案:

答案 0 :(得分:1)

最好考虑回答您的问题,因为其他答案没有解释。

使用动态分区(不列出每个分区并单独添加)的唯一方法是使用您提到的“ Hive样式”分区,格式为HDFS_PATH/year=2016/month=10/day=04/

虽然HCatalog支持自定义路径,但Hive本身不支持,并且--open ticket tracking this feature here.

在此票证得到解决之前,您必须使用您提到(并在此票证中提及)的“蜂巢样式”格式,或者使用ALTER TABLE命令自己手动添加所有分区。解决该票证后,MSCK REPAIR TABLE可以按您希望的方式工作。

答案 1 :(得分:0)

您可以通过设置set hive.exec.dynamic.partition=true;来实现此功能,或者您可以执行msck repair table table_name分区数据。

答案 2 :(得分:0)

有点晚了:

 alter table my_table add partition (year='2017',month='07',day='10', hour='10') location '2017/07/10/10';