web-dev-qa-db-ja.com

シーケンスファイルとして保存されたHiveテーブルにテキストファイルを読み込む方法

シーケンスファイルとして保存されたHiveテーブルがあります。

このテーブルにテキストファイルを読み込む必要があります。このテーブルにデータをロードするにはどうすればよいですか?

26
cldo

テキストファイルをテキストファイルHiveテーブルにロードし、このテーブルのデータをシーケンスファイルに挿入できます。

タブ区切りファイルで開始します。

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

シーケンスファイルを作成する

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

ロードしようとする;予想どおり、これは失敗します:

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

しかし、この表では:

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

ロードはうまく機能します:

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

テキストテーブルからシーケンステーブルにロードします。

insert into table test_sq select * from test_t;

また、すべてを置き換えるためにoverwriteでロード/挿入を実行できます。

52
libjack

シーケンスファイルとして保存されたテーブルを直接作成し、テキストを挿入することはできません。これを行う必要があります。

  1. テキストとして保存されたテーブルを作成する
  2. テキストファイルをテキストテーブルに挿入する
  3. CTASを実行して、シーケンスファイルとして保存されたテーブルを作成します。
  4. 必要に応じてテキストテーブルを削除します

例:

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