2012-12-28 35 views

回答

49

您可以將文本文件加載到文本文件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; 

也可以用加載/插入覆蓋來替換全部。

+2

算得上直接完成,我們可以加載到序列格式表的東西從TSV文件,而無需中間保存到其他表? – Bohdan

+0

不,它不能完成。上面的方法是將數據加載到序列文件的唯一最簡單的方法。 apche wiki也重申了這一點https://cwiki.apache.org/confluence/display/Hive/CompressedStorage –

1

您不能直接創建存儲爲序列文件的表並向其中插入文本。你必須這樣做:

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

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

DROP TABLE test_txt; 
相關問題