Dati JSON
Amazon Athena consente di analizzare i valori con codifica JSON, estrarre i dati da JSON, cercare valori e trovare i valori di lunghezza e dimensioni per matrici JSON. Per apprendere le nozioni di base sull'interrogazione dei dati JSON in Athena, prendi in considerazione i seguenti dati planetari di esempio:
{name:"Mercury",distanceFromSun:0.39,orbitalPeriod:0.24,dayLength:58.65} {name:"Venus",distanceFromSun:0.72,orbitalPeriod:0.62,dayLength:243.02} {name:"Earth",distanceFromSun:1.00,orbitalPeriod:1.00,dayLength:1.00} {name:"Mars",distanceFromSun:1.52,orbitalPeriod:1.88,dayLength:1.03}
Notate come ogni record (essenzialmente, ogni riga della tabella) si trovi su una riga distinta. Per interrogare questi dati JSON, puoi usare un'CREATE TABLEistruzione come la seguente:
CREATE EXTERNAL TABLE `planets_json`( `name` string, `distancefromsun` double, `orbitalperiod` double, `daylength` double) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/json/'
Per interrogare i dati, utilizzate un'SELECTistruzione semplice come nell'esempio seguente.
SELECT * FROM planets_json
I risultati sono simili ai seguenti:
| # | name | distanza dal sole | periodo orbitale | durata del giorno |
|---|---|---|---|---|
| 1 | mercurio | 0,39 | 0,24 | 58,65 |
| 2 | Venere | 0,72 | 0,62 | 243,02 |
| 3 | Terra | 1.0 | 1.0 | 1.0 |
| 4 | Marte | 1,52 | 1,88 | 1,03 |
Nota come l'CREATE TABLEistruzione utilizza ilOpenX JSON SerDe, che richiede che ogni record JSON si trovi su una riga separata. Se il JSON è in un bel formato di stampa o se tutti i record sono su una sola riga, i dati non verranno letti correttamente.
Per interrogare dati JSON in un bel formato di stampa, puoi usare Amazon Ion Hive SerDe invece di OpenX JSON SerDe. Considerate i dati precedenti memorizzati in un grazioso formato di stampa:
{ name:"Mercury", distanceFromSun:0.39, orbitalPeriod:0.24, dayLength:58.65 } { name:"Venus", distanceFromSun:0.72, orbitalPeriod:0.62, dayLength:243.02 } { name:"Earth", distanceFromSun:1.00, orbitalPeriod:1.00, dayLength:1.00 } { name:"Mars", distanceFromSun:1.52, orbitalPeriod:1.88, dayLength:1.03 }
Per interrogare questi dati senza riformattarli, puoi usare un'CREATE TABLEistruzione come la seguente. Nota che, invece di specificare OpenX JSON SerDe, l'istruzione specifica. STORED AS ION
CREATE EXTERNAL TABLE `planets_ion`( `name` string, `distancefromsun` DECIMAL(10, 2), `orbitalperiod` DECIMAL(10, 2), `daylength` DECIMAL(10, 2)) STORED AS ION LOCATION 's3://amzn-s3-demo-bucket/json-ion/'
La query SELECT * FROM planets_ion produce gli stessi risultati di prima. Per ulteriori informazioni sulla creazione delle tabelle in questo modo con Amazon Ion Hive SerDe, consulta la sezione. Creare tabelle Amazon Ion
L'esempio precedente i dati JSON non contengono tipi di dati complessi come array o strutture annidate. Per ulteriori informazioni sull'esecuzione di query sui dati JSON annidati, consulta. Esempio di deserializzazione di un JSON nidificato