java बाह्य तालिका हाइव बनाएं, स्थान में कई फाइलें शामिल हैं




apache hadoop (2)

विकल्प 1

उप-निर्देशिकाओं का समर्थन करने के लिए

set mapred.input.dir.recursive=true;

और यदि आप हाइव संस्करण 2.0.0 से भी कम है तो भी

set hive.mapred.supports.subdirectories=false;

विकल्प 2

एक विभाजन तालिका बनाएँ

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
partitioned by (dt date)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';
alter table LOGS add if not exists partition (dt=date '2017-04-20') LOCATION '/user/hive/warehouse/LOGS/test/20170420';
alter table LOGS add if not exists partition (dt=date '2017-04-21') LOCATION '/user/hive/warehouse/LOGS/test/20170421';
alter table LOGS add if not exists partition (dt=date '2017-04-22') LOCATION '/user/hive/warehouse/LOGS/test/20170422';

यदि आप अपनी निर्देशिकाओं को मानक सम्मेलन का प्रयोग करते हैं तो यह प्रबंधन करना आसान होगा, जैसे dt=2017-04-20 बजाय

CREATE EXTERNAL TABLE IF NOT EXISTS LOGS (LGACT STRING,NTNAME STRING)  
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
LOCATION '/user/hive/warehouse/LOGS/test';

'परीक्षण' फ़ोल्डर के तहत मैं फाइलें लिख रहा हूं दैनिक उदाहरण के लिए:

/user/hive/warehouse/LOGS/test/20170420
/user/hive/warehouse/LOGS/test/20170421
/user/hive/warehouse/LOGS/test/20170422

मेरे द्वारा बनाई गई LOGS तालिका में कोई भी डेटा नहीं देख सकता।

लेकिन, मैं तालिका का उपयोग कर बना रहा हूँ

LOCATION '/user/hive/warehouse/LOGS/test/20170422';

मैं उस दिन के रिकॉर्ड देख सकता हूँ

मैं अपनी HIVE तालिका में / टेस्ट निर्देशिका के अंतर्गत सभी डेटा देखना चाहता हूं, / test निर्देशिका हर दिन नई फाइलों के साथ पॉपुलेटेड है


डिफ़ॉल्ट हाइव द्वारा बाहरी तालिका में निर्दिष्ट स्थान के अंदर केवल फ़ाइलें (निर्देशिका नहीं) पढ़ी जाती हैं। यदि आप निर्देशिका जोड़ना सक्षम करना चाहते हैं, तो नीचे पैरामीटर सेट करें:

निर्धारित mapred.input.dir.recursive = true;