2017-07-27 104 views
1

首先我創建一個蜂巢分區表:插入到蜂巢分區表錯誤

hive> create table partition_table 
    > (sid int ,sname string ,age int)    
    > partitioned by (sex string)  
    > row format delimited fields terminated by','; 
OK 
Time taken: 1.232 seconds 

下表說明在下面給出:

hive> desc partition_table; 
    OK 
    sid      int           
    sname     string          
    age      int           
    sex      string          

# Partition Information  
# col_name    data_type    comment    

sex      string          
Time taken: 0.34 seconds, Fetched: 9 row(s) 

,然後我插入一些數據到這個表,但它不沒有工作。

hive> insert into table partition_table partition(sex='M')select sno ,sname ,age from student1 where sex ='M'; 
FAILED: SemanticException [Error 10006]: Line 1:44 Partition not found ''M'' 

爲了避免這一點,我寫了下面的命令,然後執行我的插入命令,即使在當時我反覆得到同樣的錯誤。

set exec.dynamic.partition=true;                   
set exec.dynamic.partition.mode=nonstrict; 

請指導我。在此先感謝

+0

你可以添加'select sno,sname,來自student1的年齡,其中sex ='M''輸出到問題。查詢沒有問題。 – syadav

+0

當然..分區列是否必須是英文 –

回答

2

裝載前添加分區:

ALTER TABLE partition_table ADD PARTITION(sex= 'M'); 
insert into table partition_table partition(sex='M') select sno ,sname ,age from student1 where sex ='M'; 

或嘗試動態分區:

set hive.exec.dynamic.partition=true; 
INSERT OVERWRITE TABLE partition_table PARTITION (sex) 
SELECT sid, sname, age, sex 
FROM student1; 
+0

加入分區是不必要的。查詢自動執行。 – syadav

+0

你可以看到他的錯誤說沒有找到分區'M'。在我的第二個解決方案中,您可以看到我推薦的動態分區。你在第四行停止閱讀了嗎? – invoketheshell

+0

你的答案是非常有用的,但是當我嘗試'ALTER TABLE partition_table ADD PARTITION(sex ='xxx'); ' - 它導致了一個新的錯誤'FAILED:執行錯誤,從org.apache.hadoop.hive.ql.exec.DDLTask返回代碼1。 MetaException(消息:對於直接MetaStore數據庫連接,我們不支持在客戶端級別重試。) '但是我已經設置了'蜂房的site.xml'< property> \t < name> javax.jdo.option.ConnectionURL < /name> \t < value> JDBC:MySQL的:// djt01:3306 /蜂房的characterEncoding = UTF-8 < /value> \t <描述> JDBC連接串爲JDBC metastore < /property> –

0

查詢是正確的。但是一旦檢查了表中的性別='M'值。這可能是不同的性價值。