2016-03-05 87 views
1

當我試圖插入Partiotioned表時,出現波紋管錯誤 SemanticException [Error 10044]:Line 1 :23不能插入到目標表中,因爲列號/類型不同'US'':表inslace-0有2列,但查詢有3列。插入Hive表 - 不能插入到目標表中,因爲列號/類型

我的輸入數據

1,aaa,US 
2,bbb,US 
3,ccc,IN 
4,ddd,US 
5,eee,IN 
6,fff,IN 
7,ggg,US 

創建蜂巢表TX

create table tx (no int,name string,country string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; 

創建按國家劃分分區表T1

create table t1 (no int,name string) PARTITIONED BY (country string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; 

我試過波紋管兩個插入,但未能

INSERT OVERWRITE TABLE t1 PARTITION (country='US') 
SELECT * from tx where country = 'US'; 

    INSERT OVERWRITE TABLE t1 PARTITION (country='US') 
SELECT no,name,country from tx where country = 'US'; 

錯誤:SemanticException [錯誤10044]:行1:23無法插入到目標表,因爲列數/類型不同的'US'':表insreg-0具有2列,但查詢具有3列。

+3

RTFM - 海夫不是甲骨文。在Hive中,分區「列」作爲**元數據**進行管理,它們不包含在數據文件中,而是用作子目錄名稱。所以你的分區表只有2個真正的列,你必須用你的SELECT只輸入2列。 –

+3

另一方面,如果您使用了*動態分區* - 即沒有文字值的'INSERT ... PARTITION(country)' - 那麼分區「列」的實際值將不得不作爲*在SELECT中的額外*列,在真正的列之後。 –

+0

謝謝一噸Samson Scharfrichter。是的,它工作.....我發佈了正確的查詢.... –

回答

2

非常感謝參孫Scharfrichter

INSERT OVERWRITE TABLE t1 PARTITION (country='US') 
SELECT no,name from tx where country = 'US'; 
    INSERT INTO TABLE t1 PARTITION (country='IN') 
SELECT no,name from tx where country = 'IN'; 

我查了分區

hive> SHOW PARTITIONS t1; 
OK 
country=IN 
country=US 
Time taken: 0.291 seconds, Fetched: 2 row(s) 
hive> 
+0

我明白了。所以基本上,不要使用*,也不要放置分區列。謝謝! –