2016-09-18 63 views
0

如果我将'dt'指定为分区,则出现错误:“FAILED:执行错误,从org.apache.hadoop.hive.ql.exec返回代码2。 mr.MapRedTask”。 这里是我的代码以分区:将配置信息指定为分区时返回错误

create EXTERNAL table novaya.user_goods_behaviour 
( member_srl   string, 
    productid   string , 
    buy_amt    bigint, 
    return_amt   bigint, 
    cart_cnt    bigint, 
    view_cnt    bigint, 
    search_click_cnt  bigint , 
    brand    string , 
    mng_catecode1  int , 
    mng_cate1   string , 
    mng_catecode2  int , 
    mng_cate2   string , 
    mng_catecode3  int , 
    mng_cate3   string , 
    mng_catecode4  int , 
    mng_cate4   string) partitioned by (dt string) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS parquet; 

insert overwrite table novaya.user_goods_behaviour PARTITION (dt) 
select * from ...; 

然而,当我不使用的分区,这是确定。

create EXTERNAL table novaya.user_goods_behaviour 
( member_srl   string, 
    productid   string , 
    dt     string, 
    buy_amt    bigint, 
    return_amt   bigint, 
    cart_cnt    bigint, 
    view_cnt    bigint, 
    search_click_cnt  bigint , 
    brand    string , 
    mng_catecode1  int , 
    mng_cate1   string , 
    mng_catecode2  int , 
    mng_cate2   string , 
    mng_catecode3  int , 
    mng_cate3   string , 
    mng_catecode4  int , 
    mng_cate4   string) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS parquet; 



insert overwrite table novaya.user_goods_behaviour select * from ...; 

所以我想知道这是怎么回事,以及如何解决它。 非常感谢。

回答

0

分区字段应该在选择投影列表中最后。

即由于dt是分区列,它应该是最后一个。您正在使用*运营商,因此不确定dt是否为最后一位。

尝试以下查询:

insert overwrite table novaya.user_goods_behaviour PARTITION (dt) 
Select `(dt)?+.+`, st from ....; 
+0

我改变了字段选择顺序,并把dt放在最后。它的工作原理。谢谢。 – yanachen

0

的列名尝试:

insert overwrite table novaya.user_goods_behaviour PARTITION (dt) 
select column1,column2.... from ... 

那是解决不了你的问题,那么你可以尝试插入查询之前运行此查询:

set hive.exec.dynamic.partition.mode=nonstrict; 
相关问题