我的表上有 2 个分区,如下所示:
hive> show partitions alt_part;
OK
yop=2011
yop=2013
现在我想向 2013 年添加一个内部分区。但我收到以下错误。
hive> alter table alt_part add partition(yop=2013,mop=9); FAILED: SemanticException Partition spec {yop=2013,mop=9} contains non-partition columns
如果我做错了,请纠正我。
我也尝试过位置...
hive>alter table alt_part add partition(yop=2013,mop=9) location '/user/revathi-prac/partitions/dec21/yop=2013/mop=9';
但我仍然遇到同样的问题...
最佳答案
有一种方法可以做到这一点,而无需花时间找出数据未加载的原因。
如果您的文件位于 /user/hive/warehouse
之外,我强烈建议您使用外部表。
CREATE EXTERNAL TABLE cars (
vin BIGINT,
model STRING,
colour STRING
)
PARTITIONED BY (year STRING, month STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/user/revathi-prac/';
现在分区可以相对容易地完成:
ALTER TABLE cars ADD PARTITION (year=2015, month=12)
LOCATION '/user/revathi-prac/2015/12'
指定正确的位置可以节省您处理 hive 自动创建的文件夹(如 year=2015/month=12
)的时间,并且通过 bash 或 python 循环遍历所有子文件夹会更容易。
您还需要在更改表之前创建适当的分区。您不能仅按分区年
创建表,然后尝试添加新的不存在的分区,例如月
。
希望有帮助!
关于hadoop - 如何在hive中使用alter命令创建多个分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34408646/