[英]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.