wake-up-neo.com

So laden Sie eine Textdatei in eine Hive-Tabelle, die als Sequenzdateien gespeichert ist

Ich habe eine Hive-Tabelle als Sequenzdatei gespeichert.

Ich muss eine Textdatei in diese Tabelle laden. Wie lade ich die Daten in diese Tabelle?

25
cldo

Sie können die Textdatei in eine Textdatei-Hive-Tabelle laden und dann die Daten aus dieser Tabelle in Ihre Sequenzdatei einfügen.

Beginnen Sie mit einer tabulatorgetrennten Datei:

% cat /tmp/input.txt
a       b
a2      b2

erstellen Sie eine Sequenzdatei

Hive> create table test_sq(k string, v string) stored as sequencefile;

versuche zu laden; Wie erwartet, wird dies fehlschlagen:

Hive> load data local inpath '/tmp/input.txt' into table test_sq;

Aber mit dieser Tabelle:

Hive> create table test_t(k string, v string) row format delimited fields terminated by '\t' stored as textfile;

Die Ladung funktioniert gut:

Hive> load data local inpath '/tmp/input.txt' into table test_t;
OK
Hive> select * from test_t;
OK
a       b
a2      b2

Laden Sie nun aus der Texttabelle in die Sequenztabelle:

insert into table test_sq select * from test_t;

Kann auch mit overwrite laden/einfügen, um alle zu ersetzen.

51
libjack

Sie können eine als Sequenzdatei gespeicherte Tabelle nicht direkt erstellen und Text einfügen. Du musst das tun:

  1. Erstellen Sie eine als Text gespeicherte Tabelle 
  2. Fügen Sie die Textdatei in die Texttabelle ein
  3. Führen Sie einen CTAS durch, um die als Sequenzdatei gespeicherte Tabelle zu erstellen.
  4. Löschen Sie die Texttabelle, falls gewünscht

Beispiel:

CREATE TABLE test_txt(field1 int, field2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA INPATH '/path/to/file.tsv' INTO TABLE test_txt;

CREATE TABLE test STORED AS SEQUENCEFILE
AS SELECT * FROM test_txt;

DROP TABLE test_txt;
0