2016-08-20 6 views
0

Ich habe eine Bienenstock-Tabelle mit der Abfrage erstellt -Nest - Partitionstabelle

create table studpart4(id int, name string) partitioned by (course string, year int) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile; 

erfolgreich erstellt.

Loaded Daten mit folgendem Befehl -

load data local inpath '/scratch/hive_inputs/student_input_1.txt' overwrite into table studpart4 partition(course='cse',year=2);

Und meine Eingangsdaten-Datei sieht aus wie -

101 student1 cse 1 

102 student2 cse 2 

103 student3 eee 3 

104 student4 eee 4 

105 student5 cse 1 

106 student6 cse 2 

107 student7 eee 3 

108 student8 eee 4 

109 student9 cse 1 

110 student10 cse 2 

Aber Ausgang wird als (von select * from studpart4) angezeigt -

101 student1 cse 2 

102 student2 cse 2 

103 student3 eee 2 

104 student4 eee 2 

105 student5 cse 2 

106 student6 cse 2 

107 student7 eee 2 

108 student8 eee 2 

109 student9 cse 2 

110 student10 cse 2 

Warum ist die letzte Spalte a 2. Warum wurde es falsch geändert und aktualisiert?

+0

http://stackoverflow.com/a/13224581/2079249 –

Antwort

0

Das Ergebnis, das Sie angezeigt bekommen, ist genau das, was Sie Hive mit Ihren Daten gesagt haben.

In Ihrem ersten Befehl, den Sie erstellen eine partitionierten Tabelle studpart4 mit zwei Spalten, id und name und zwei partitionierten Schlüssel, course und year (die einmal erstellt, wie reguläre Spalten verhalten). Nun, in Ihrem zweiten Befehl, was Sie tun, ist dies:

load data local inpath '/scratch/hive_inputs/student_input_1.txt' overwrite into table studpart4 partition(course='cse',year=2) 

was im Grunde bedeutet "Kopie alle Daten aus student_input_1.txt in die Tabelle studpart4 und stellen Sie alle Werte der Spalte course zu‚CSE‘und alle Werte der Spalte year bis '2' ". Intern erstellt Hive eine Verzeichnisstruktur, die Ihre Partitionsschlüssel enthält. Ihre Daten werden in einem Verzeichnis wie diese gespeichert werden:

.../studpart4/course=cse/year=2/ 

Ich vermute, dass das, was Sie wirklich wollen, Hive ist der Spaltenwert der course und year in Ihrer .txt Datei und legen Sie die richtigen Werte für Sie zu erkennen. Um dies durchzuführen, müssen Sie dynamic partitioning Ihrer Tabellen verwenden und eine Strategie von loading Ihre Daten in eine externe Tabelle und dann einen INSERT OVERWRITE INTO TABLE Befehl verwenden, um die Daten in Ihrer studpart4 Tabelle zu speichern. Der Link, den BigDataLearner in einem Kommentar gepostet hat, beschreibt diese Strategie.

Ich hoffe, das hilft.

+0

Ausgezeichnet. Danke für die ausführliche Erklärung. Ich bin jetzt geklärt. –

+0

Sie sind herzlich willkommen :-) –