我在桌子上有2个分区,如下所示:
hive> show partitions alt_part;
OK
yop=2011
yop=2013
现在我想在2013年添加一个内部分区。但是我收到了以下错误。
蜂房> alter table alt_part add partition(yop = 2013,mop = 9);失败: SemanticException分区规范{yop = 2013,mop = 9}包含 非分区列
如果我犯了一些错误,请纠正我。
我也尝试过定位....
hive> alter table alt_part add partition(yop = 2013,mop = 9)location' / user / revathi-prac / partitions / dec21 / yop = 2013 / mop = 9';
但我仍有同样的问题...
答案 0 :(得分:0)
以下是在多个级别创建分区的示例。您是否已将yop和mop定义为create table命令的一部分。您可以通过运行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>
答案 1 :(得分:0)
有一种方法可以不花时间找出数据未加载的原因。
如果您的文件在/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'
指定正确的位置可以节省您使用像year=2015/month=12
这样的hive自动创建的文件夹的时间,并且通过bash或python更容易遍历所有子文件夹。
此外,您需要在更改表之前创建适当的分区。您无法仅按分区year
创建表格,然后尝试添加新的不存在的分区,例如month
。
希望有所帮助!