我需要为只读存在的文件夹结构创建一个外部表。
原始配置单元表具有年,月,日等分区。他们的文件以这种方式存储在路径中HDFS_PATH/2016/10/04/
但是当我在hive中创建一个外部表时,它总是存储到像HDFS_PATH/year=2016/month=10/day=04/
虽然我可以更改此链接中的1个分区位置How to Update/Drop a Hive Partition? ,但我必须为每个分区组合设置位置。
有没有更简单的方法来一劳永逸地设置它?
答案 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';