2017-02-03 19 views
8

में जेसन फाइलों में एकाधिक तत्वों को स्टोर करें मेरे पास कुछ जेसन फाइलें एस 3 बाल्टी में संग्रहीत हैं, जहां प्रत्येक फ़ाइल में एक ही संरचना के कई तत्व होते हैं। उदाहरण के लिए,एडब्ल्यूएस एथेना

[{"eventId":"1","eventName":"INSERT","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"New item!","Id":101}},{"eventId":"2","eventName":"MODIFY","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"This item has changed","Id":101}},{"eventId":"3","eventName":"REMOVE","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"This item has changed","Id":101}}] 

मैं उपरोक्त डेटा से संबंधित एथेना में एक टेबल बनाना चाहता हूं।

क्वेरी मैं तालिका बनाने के लिए लिखा है:

CREATE EXTERNAL TABLE IF NOT EXISTS sampledb.elb_logs2 (
    `eventId` string, 
    `eventName` string, 
    `eventVersion` string, 
    `eventSource` string, 
    `awsRegion` string, 
    `image` map<string,string> 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES (
    'serialization.format' = '1', 
    'field.delim' = ' ' 
) LOCATION 's3://<bucketname>/'; 

लेकिन अगर मैं एक चयन करें क्वेरी कर इस प्रकार,

SELECT * FROM sampledb.elb_logs4; 

मैं निम्नलिखित परिणाम प्राप्त:

1 {"eventid":"1","eventversion":"1.0","image":{"id":"101","message":"New item!"},"eventsource":"aws:dynamodb","eventname":"INSERT","awsregion":"us-west-2"} {"eventid":"2","eventversion":"1.0","image":{"id":"101","message":"This item has changed"},"eventsource":"aws:dynamodb","eventname":"MODIFY","awsregion":"us-west-2"} {"eventid":"3","eventversion":"1.0","image":{"id":"101","message":"This item has changed"},"eventsource":"aws:dynamodb","eventname":"REMOVE","awsregion":"us-west-2"} 

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

मैं एक प्रविष्टि के रूप में जेसन फ़ाइल के प्रत्येक तत्व को कैसे पढ़ सकता हूं?

संपादित करें: मैं छवि के प्रत्येक उपक्रम, यानी, मानचित्र के प्रत्येक तत्व को कैसे पढ़ सकता हूं?

धन्यवाद।

उत्तर

9

Question1: "1", "घटनानाम": एडब्ल्यूएस एथेना

मैं

{ "eventID" के रूप में मेरे json फ़ाइल को फिर से लिखने की जरूरत के लिए json फाइलों में स्टोर से अधिक तत्वों "सम्मिलित करें", "eventVersion": "1.0", "eventSource": "aws: dynamodb", "awsRegion": "us-west-2", "image": {"message": "नया आइटम!", "आईडी": 101 }}, {"eventId": "2", "eventName": "संशोधित", "eventVersion": "1.0", "eventSource": "aws: dynamodb", "awsRegion": "us-west-2", "छवि": {"संदेश": "यह आइटम बदल गया है", "आईडी": 101}}, {"eventId": "3", "eventName": "निकालें", "eventVersion": "1.0", " इवेंटसोर्स ":" aws: dynamodb "," awsRegion ":" us-west-2 "," image ": {" message ":" यह आइटम बदल गया है "," आईडी ": 101} }

इसका मतलब है कि

वर्ग कोष्ठक [] एक पंक्ति

{.....................} 
{.....................} 
{.....................} 

Question2 में प्रत्येक तत्व रखें निकालें। प्रवेश nonlinear json विशेषताओं

CREATE EXTERNAL TABLE IF NOT EXISTS <tablename> (
    `eventId` string, 
    `eventName` string, 
    `eventVersion` string, 
    `eventSource` string, 
    `awsRegion` string, 
    `image` struct <`Id` : string, 
        `Message` : string> 
) 
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES (
    'serialization.format' = '1', 
    "dots.in.keys" = "true" 
) LOCATION 's3://exampletablewithstream-us-west-2/'; 

क्वेरी:

select image.Id, image.message from <tablename>; 

रेफरी:

http://engineering.skybettingandgaming.com/2015/01/20/parsing-json-in-hive/

https://github.com/rcongiu/Hive-JSON-Serde#mapping-hive-keywords

+0

मैं Q1 के रूप में एक ही समस्या मेरे डेटा के रूप में sendgrid से आता है और मेरे पास डेटा प्रारूप के बारे में ज्यादा विकल्प नहीं है :( – CpILL

संबंधित मुद्दे