Interrogation de JSON - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation de JSON

Amazon Athena vous permet d'interroger des données codées en JSON, d'extraire des données du JSON imbriqué, de rechercher des valeurs et de déterminer la longueur et la taille des tableaux JSON. Pour apprendre les bases de l'interrogation de données JSON dans Athena, considérez les exemples de données planétaires suivants :

{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}

Notez que chaque enregistrement (essentiellement chaque ligne du tableau) se trouve sur une ligne distincte. Pour interroger ces données JSON, vous pouvez utiliser une CREATE TABLE instruction comme celle-ci :

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/'

Pour interroger les données, utilisez une SELECT instruction simple comme dans l'exemple suivant.

SELECT * FROM planets_json

Les résultats de la requête se présentent comme suit.

# name distance du soleil période orbitale durée du jour
1 Mercure 0,39 0,24 58,65
2 Vénus 0,72 0,62 243,02
3 Terre 1.0 1.0 1.0
4 Mars 1,52 1,88 1,03

Remarquez comment l'CREATE TABLEinstruction utilise leOpenX JSON SerDe, ce qui nécessite que chaque enregistrement JSON figure sur une ligne séparée. Si le JSON est dans un joli format d'impression, ou si tous les enregistrements se trouvent sur une seule ligne, les données ne seront pas lues correctement.

Pour interroger des données JSON dans un joli format d'impression, vous pouvez utiliser le JSON SerDe Amazon Ion Hive au lieu d'OpenX. SerDe Considérez les données précédentes stockées dans un joli format d'impression :

{ 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 }

Pour interroger ces données sans les reformater, vous pouvez utiliser une CREATE TABLE instruction comme celle-ci. Notez qu'au lieu de spécifier le code JSON OpenX SerDe, l'instruction spécifie. 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 requête SELECT * FROM planets_ion produit les mêmes résultats que précédemment. Pour plus d'informations sur la création de tables de cette manière à l'aide d'Amazon Ion Hive SerDe, consultezUtilisation de CREATE TABLE pour créer des tables Amazon Ion.

L'exemple de données JSON précédent ne contient pas de types de données complexes tels que des tableaux imbriqués ou des structures. Pour plus d'informations sur l'interrogation de données JSON imbriquées, consultez. Exemple : désérialisation des données JSON imbriquées