Esecuzione di query su JSON - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di query su JSON

Amazon Athena consente di interrogare dati con codifica JSON, estrarre dati da JSON annidato, cercare valori e trovare la lunghezza e la dimensione degli array 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://DOC-EXAMPLE-BUCKET/json/'

Per interrogare i dati, utilizzate un'SELECTistruzione semplice come nell'esempio seguente.

SELECT * FROM planets_json

I risultati della query sono simili ai seguenti.

# nome 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
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 SerDe OpenX JSON. 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 SerDe JSON, 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://DOC-EXAMPLE-BUCKET/json-ion/'

La query SELECT * FROM planets_ion produce gli stessi risultati di prima. Per ulteriori informazioni sulla creazione di tabelle in questo modo utilizzando Amazon Ion Hive SerDe, consultaUtilizzo di CREATE TABLE per 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'interrogazione di dati JSON annidati, consulta. Esempio di deserializzazione di un JSON nidificato