2012-12-28 44 views

Trả lời

49

Bạn có thể tải tệp văn bản vào bảng Hf văn bản và sau đó chèn dữ liệu từ bảng này vào tệp tuần tự của bạn.

Bắt đầu với một tab tập tin được phân định:

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

tạo ra một tập tin chuỗi

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

thử tải; như mong đợi, điều này sẽ thất bại:

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

Nhưng với bảng này:

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

Tải trọng làm việc tốt:

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

Bây giờ nạp vào bảng chuỗi từ bảng văn bản:

insert into table test_sq select * from test_t; 

Cũng có thể tải/chèn với ghi đè để thay thế tất cả.

+2

mà có thể được thực hiện trực tiếp, chúng ta có thể tải sang định dạng chuỗi bảng thứ từ tập tin TSV mà không cần tiết kiệm trung gian để bảng khác? – Bohdan

+0

Không thể thực hiện được. Cách dễ nhất để tải dữ liệu vào tệp chuỗi là cách trên. Điều tương tự cũng được xác nhận lại bởi apche wiki https://cwiki.apache.org/confluence/display/Hive/CompressedStorage –

1

Bạn không thể trực tiếp tạo bảng được lưu trữ dưới dạng tệp chuỗi và chèn văn bản vào đó. Bạn phải làm điều này:

  1. Tạo một bảng lưu trữ dưới dạng văn bản
  2. Chèn các tập tin văn bản vào bảng chữ
  3. Thực hiện CTAS để tạo ra các bảng lưu trữ dưới dạng tập tin theo thứ tự.
  4. Thả bảng văn bản nếu muốn

Ví dụ:

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; 
Các vấn đề liên quan