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à.
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 TABLE
istruzione 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'SELECT
istruzione 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 TABLE
istruzione 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 TABLE
istruzione 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://amzn-s3-demo-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, consultaCrea 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