आप JSON डेटा से एक HIVE तालिका कैसे बनाते हैं?




hadoop amazon-emr (4)

मैं कुछ JSON डेटा (नेस्टेड) ​​से एक हाइव टेबल बनाना चाहता हूं और उस पर क्वेरी चला सकता हूं? क्या यह भी संभव है?

मैं जेएसओएन फ़ाइल को एस 3 पर अपलोड करने और ईएमआर इंस्टेंस लॉन्च करने के लिए प्राप्त कर लिया है, लेकिन मुझे नहीं पता कि JSON फ़ाइल को हाइव टेबल प्राप्त करने के लिए हाइव कंसोल में क्या टाइप करना है?

क्या मुझे शुरू करने के लिए किसी के पास कुछ उदाहरण कमांड है, मुझे Google के साथ कुछ भी उपयोगी नहीं मिल रहा है ...


.Json फ़ाइल से SerDe स्कीमा उत्पन्न करना

यदि आपकी .json फ़ाइल बड़ी है, तो स्कीमा को हाथ से लिखना कठिन हो सकता है। यदि ऐसा है, तो आप इसे स्वचालित रूप से उत्पन्न करने के लिए इस आसान टूल का उपयोग कर सकते हैं।

https://github.com/strelec/hive-serde-schema-gen


Hive 0.12 और बाद में hcatalog-core में जेसनसेरडे है जो आपके JSON डेटा को क्रमबद्ध और deserialize करेगा। तो, आपको बस इतना करना है कि बाहरी उदाहरण बनाएं जैसे कि निम्न उदाहरण:

CREATE EXTERNAL TABLE json_table (
    username string,
    tweet string,
    timestamp long)
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE
LOCATION
 'hdfs://data/some-folder-in-hdfs'

Corresponsing जेसन डेटा फ़ाइल निम्नलिखित उदाहरण की तरह दिखना चाहिए:

{"username":"miguno","tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 }
{"username":"BlizzardCS","tweet":"Works as intended.  Terran is IMBA.","timestamp": 1366154481 }

मुझे बस एक ही समस्या को हल करना पड़ा, और अभी तक जेएसओएन सर्ड्स से जुड़े किसी भी रूप में पर्याप्त नहीं लग रहा था। अमेज़ॅन का अच्छा हो सकता है, लेकिन मुझे इसके लिए स्रोत नहीं मिल रहा है (क्या किसी के पास कोई लिंक है?)।

जेसनसेरडे में निर्मित एचकेटेल मेरे लिए काम कर रहा है, भले ही मैं वास्तव में कहीं भी एचसीकेटल का उपयोग नहीं कर रहा हूं।

https://github.com/apache/hcatalog/blob/branch-0.5/core/src/main/java/org/apache/hcatalog/data/JsonSerDe.java

HCatalog के JsonSerDe का उपयोग करने के लिए, hcatalog-core .jar को हाइव के ऑक्सपैथ में जोड़ें और अपनी हाइव तालिका बनाएं:

$ hive --auxpath /path/to/hcatalog-core.jar

hive (default)>
create table my_table(...)
ROW FORMAT SERDE
  'org.apache.hcatalog.data.JsonSerDe'
...
;

मैंने यहां अधिक जानकारी के साथ एक पोस्ट लिखा था

http://ottomata.org/tech/too-many-hive-json-serdes/


हाइव को अपने JSON को अपनी तालिका में कॉलम पर मैप करने के लिए आपको JSON serde का उपयोग करने की आवश्यकता होगी।

वास्तव में एक अच्छा उदाहरण आपको दिखा रहा है कि यहां कैसा है:

http://aws.amazon.com/articles/2855

दुर्भाग्य से जेएसओएन सर्ड आपूर्ति की गई है जो नेस्टेड JSON को बहुत अच्छी तरह से संभाल नहीं पाती है, इसलिए इसका उपयोग करने के लिए आपको अपने JSON को फ़्लैट करना पड़ सकता है।

लेख से सही वाक्यविन्यास का एक उदाहरण यहां दिया गया है:

create external table impressions (
    requestBeginTime string, requestEndTime string, hostname string
  )
  partitioned by (
    dt string
  )
  row format 
    serde 'com.amazon.elasticmapreduce.JsonSerde'
    with serdeproperties ( 
      'paths'='requestBeginTime, requestEndTime, hostname'
    )
  location 's3://my.bucket/' ;






emr