繁体   English   中英

如何在配置单元中使用 alter 命令创建多个分区?

[英]How to create multiple partitions using alter command in hive?

我在一张桌子上有 2 个分区,如下所示:

hive> show partitions alt_part;
OK
yop=2011
yop=2013

现在我想为 2013 年添加一个内部分区。但我收到以下错误。

配置单元> alter table alt_part 添加分区(yop=2013,mop=9); 失败:SemanticException 分区规范 {yop=2013,mop=9} 包含非分区列

如果我做错了,请纠正我。

我也尝试过定位....

蜂巢>改变表 alt_part 添加分区 (yop=2013,mop=9) 位置 '/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 循环遍历所有子文件夹会更容易。

您还需要在更改表之前创建一个适当的分区。 您不能仅按分区year创建表,然后尝试添加一个新的不存在的分区,如month

希望有帮助!

这是在多个级别创建分区的示例。 您是否将 yop 和 mop 都定义为创建表命令的一部分。 您可以通过运行show create table alt_part并粘贴输出来粘贴 create table 命令的语法。

hive> CREATE TABLE `order_items`(
    >   `order_item_id` int, 
    >   `order_item_order_id` int, 
    >   `order_item_order_date` string, 
    >   `order_item_product_id` int, 
    >   `order_item_quantity` smallint, 
    >   `order_item_subtotal` float, 
    >   `order_item_product_price` float)
    > partitioned by (year int, month int);
OK
Time taken: 0.195 seconds
hive> alter table order_items add partition (year=2013, month=1);
OK
Time taken: 0.407 seconds
hive> show partitions order_items;
OK
year=2013/month=1
Time taken: 0.551 seconds, Fetched: 1 row(s)
hive> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM