2012-12-28 11 views

答えて

49

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

タブ区切りのファイルでスタート:

% 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

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

  • にテキストファイルを挿入したテキスト
  • として格納されたテーブルを作成します

    1. :あなたはこれを行う必要があります。
    2. ドロップテキストテーブル

    例必要に応じて:

    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; 
    
  • 関連する問題