2017-07-27 4 views
1

Zuerst erstelle ich einen Bienenstock partitionierten Tabelle:Einsatz in hive partitionierten Tabelle Fehler

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 

Die Tabelle ab unten angegeben:

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) 

und dann füge ich einige Daten in dieser Tabelle, aber es doesn arbeite nicht.

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'' 

Um dies zu vermeiden, habe ich den folgenden Befehl geschrieben und dann meinen Einfügebefehl ausgeführt, selbst dann bekomme ich den gleichen Fehler wiederholt.

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

Bitte führen Sie mich. Vielen Dank im Voraus

+0

können Sie hinzufügen, wählen Sie Sno, Sname, Alter von Student1, wo Sex = 'M'output Frage. Es gibt kein Problem mit der Abfrage. – syadav

+0

natürlich .. muss die Partition Spalte Englisch –

Antwort

2

fügen Sie die Partition vor dem Laden:

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'; 

oder versuchen dynamische Partitionierung:

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

hinzufügen Partition ist nicht notwendig. Abfrage tut es automatisch. – syadav

+0

Sie können sehen, dass sein Fehler besagt, dass die Partition "M" nicht gefunden wird. In meiner zweiten Lösung können Sie sehen, dass ich dynamische Partitionierung empfohlen habe. Hast du in Zeile vier aufgehört zu lesen? – invoketheshell

+0

Ihre Antwort ist sehr nützlich, aber wenn ich versuche, ALTER TABLE partition_table ADD PARTITION (sex = 'xxx'); '- Es verursachte einen neuen Fehler' FAILED: Execution Error, Rückgabecode 1 von org.apache.hadoop.hive.ql.exec.DDLTask. MetaException (Meldung: Für die direkte Metastore DB-Verbindungen, wir unterstützen keine Wiederholungen auf Client-Ebene.) 'aber ich habe setzen bereits die' hive-site.xml '< property> \t < name> javax.jdo.option.ConnectionURL < /name> \t < value> jdbc: mysql: // djt01: 3306/hive characteren = UTF-8 < /value> \t JDBC verbinden Zeichenfolge für eine JDBC Metastore < /property> –

0

Ihre Anfrage korrekt war. Aber überprüfen Sie einmal den Sex = 'M' Wert in Ihrer Tabelle. Es könnte ein anderer Geschlechtswert sein.

Verwandte Themen