wake-up-neo.com

beim Laden der Daten aus flachen Dateien in Hive-Tabellen werden Nullwerte abgerufen

Ich bekomme die Nullwerte beim Laden der Daten aus flachen Dateien in Hive-Tabellen.
meine tabellenstruktur ist wie folgt:

Hive> create table test_Hive (id int,value string);

und meine flache Datei sieht folgendermaßen aus: input.txt

1   a
2   b
3   c
4   d
5   e
6   F
7   G
8   j

wenn ich die folgenden Befehle ausführte, erhalte ich Nullwerte:

Hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_Hive;
Hive> select * from test_Hive;
OK<br>
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL

Bildschirmfoto:

Hive> create table test_Hive (id int,value string);
OK
Time taken: 4.97 seconds
Hive> show tables;
OK
test_Hive
Time taken: 0.124 seconds
Hive> LOAD DATA LOCAL INPATH '/home/hduser/input2.txt' OVERWRITE INTO TABLE test_Hive;
Copying data from file:/home/hduser/input2.txt
Copying file: file:/home/hduser/input2.txt
Loading data to table default.test_Hive
Deleted hdfs://hydhtc227141d:54310/app/Hive/warehouse/test_Hive
OK
Time taken: 0.572 seconds
Hive> select * from test_Hive;
OK
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
NULL    NULL
Time taken: 0.182 seconds
15
user1823697

Das Standardfeldendezeichen in Hive ist ^ A. Sie müssen in Ihrer create table-Anweisung explizit erwähnen, dass Sie ein anderes Feldtrennzeichen verwenden.

Ähnlich zu dem, was Lorand Bending im Kommentar zeigte, verwende:

CREATE TABLE test_Hive(id INT, value STRING) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

Sie müssen keinen Speicherort angeben, da Sie eine verwaltete Tabelle erstellen (und keine externe Tabelle).

19
Mark Grover

Das Problem, mit dem Sie konfrontiert sind, ist, dass in Ihren Daten die Felder durch '' getrennt sind und Sie beim Erstellen der Tabelle das Feldtrennzeichen nicht erwähnt haben. Wenn Sie also das Feldtrennzeichen beim Erstellen der Hive-Tabelle nicht erwähnen, berücksichtigt Hive standardmäßig ^ A als Trennzeichen.

Um Ihr Problem zu lösen, können Sie die Tabelle mit der folgenden Syntax neu erstellen, und es würde funktionieren.

CREATE TABLE test_Hive(id INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

6
Mufaddal Kamdar

Liste der Standardaufzeichnungen und Feldbegrenzungen von Hive:

  1. \ n

  2. ^ A

  3. ^ B

  4. ^ C

drücken Sie ^ V ^ A könnte ein ^ A in Vim einfügen.

1
songhir

Die Lösung ist ziemlich einfach. Die Tabelle wurde nicht richtig erstellt. 

Eine einfache Lösung für Ihr Problem oder weitere Probleme besteht darin, zu wissen, wie die Daten geladen werden.

CREATE TABLE [WENN NICHT EXISTIERT] mytableName (id int, Wertstring)

ROW FORMAT DELIMITED

FELDER BEENDET DURCH '/ t'

GESPEICHERT ALS TEXTFILE;

Nun lass mich den Code erklären:

  1. Erste Zeile Erstellen Ihrer Tabelle. Die Option [IF NOT EXIST] ist optional und zeigt an, ob die Tabelle nicht vorhanden ist. Es ist mehr eine Sicherheitsmaßnahme.

  2. Zweite Zeile Gibt ein Trennzeichen für strukturierte Felder auf Tabellenebene an.

  3. Drittes Element Sie können jedes einzelne Zeichen angeben. Die Standardeinstellung lautet '\ 001' . '/ T' steht für einen Tabulatorbereich: in Ihrem Fall '|' ist für Daten, die nebeneinander liegen und durch | .__ getrennt sind. ' 'für einen Zeichenraum. Und so weiter...

  4. Vierte Zeile: Gibt den Dateityp an, in dem Daten gespeichert werden sollen. Die Datei kann eine TEXTFILE, SEQUENCEFILE, RCFILE oder BINARY SEQUENCEFILE sein. Oder wie die Daten gespeichert werden, kann als Java-Eingabe- und Ausgabe-Klasse angegeben werden. 

beim Laden vor Ort:

LOCD DATA LOCAL INPATH '/your/data/path.csv' [OVERWRITE] IN TABLE myTableName;

Prüfen Sie Ihre Daten immer mit einer einfachen select * -Anweisung.

Ich hoffe es hilft.

1
user 451

bitte überprüfen Sie die Dataset-Datumsspalte, die dem Datumsformat yyyy-mm-dd .__ folgen sollte. Wenn die Zeichenfolge das Format 'yyyy-mm-dd' hat, wird ein Datumswert zurückgegeben, der diesem Jahr/Monat/Tag entspricht. Wenn der Zeichenfolgewert nicht mit diesem Format übereinstimmt, wird NULL zurückgegeben . Offizielle Dokumentation von Hive

1

Die Elemente werden durch Leerzeichen oder Tabulator getrennt. Lassen Sie die Registerkarte diesen Schritten folgen. Bei getrenntem Speicherplatz verwenden Sie '' anstelle von '\ t'. 

Hive> CREATE TABLE test_Hive(id INT, value STRING) row format
   delimited fields terminated by '\t' line formated by '\n' stored as filename;

Dann musst du eintreten 

Hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_Hive;

Hive> select * from test_Hive;

Nun erhalten Sie genau Ihren erwarteten Ausgabedateinamen.

1
Venu A Positive