2012-12-28 24 views
24

मेरे पास एक अनुक्रम तालिका है जो अनुक्रम फ़ाइल के रूप में संग्रहीत है।अनुक्रम फ़ाइलों के रूप में संग्रहीत एक हाइव तालिका में टेक्स्ट फ़ाइल को लोड करने के लिए कैसे करें

मुझे इस तालिका में एक टेक्स्ट फ़ाइल लोड करने की आवश्यकता है। मैं इस तालिका में डेटा कैसे लोड करूं?

उत्तर

49

आप पाठ फ़ाइल को टेक्स्टफाइल हाइव तालिका में लोड कर सकते हैं और फिर इस तालिका से डेटा को अपने अनुक्रम फ़ाइल में सम्मिलित कर सकते हैं।

एक टैब सीमांकित फ़ाइल के साथ प्रारंभ:

% 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

नहीं, यह नहीं किया जा सकता है। अनुक्रम फ़ाइल में डेटा लोड करने का एकमात्र आसान तरीका उपर्युक्त तरीका है। एपीके विकी द्वारा इसकी पुष्टि की जाती है 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;