hadoop - 如何在hive中使用alter命令创建多个分区?

标签 hadoop

我的表上有 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/

相关文章:

hadoop - 如何在Hadoop 1.x中实现Namenode高可用性?

java - java hdfs客户端是否需要有core-site.xml和hdfs-site.xml才能连接?

hadoop - 如何减少 Hadoop Yarn Container 生成的日志量?

hadoop - 限制 hadoop 客户端不创建隐藏的校验和文件

hadoop - 在 hadoop 中 - 文件拆分的 Map-Reduce 错误

sql - Hive Optimizer 在优化 View 查询时是否考虑 View 定义?

sql - 如何获取 SQL case 语句中两个日期中的最新日期?

eclipse - 线程 "main"java.lang.NoClassDefFoundError : com/google/common/base/Preconditions 中的异常

amazon-web-services - 如何使用 "s3a://"方案让 Hive 2.2.1 成功与 AWS S3 集成

java - 错误: java heap space on Google Data-Proc Cluster