

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 des données JSON
<a name="querying-JSON"></a>

Amazon Athena vous permet d’interroger des données codées en JSON, d’extraire des données de JSON imbriqués, de rechercher des valeurs et de déterminer la longueur et la taille de tableaux JSON. Les exemples suivants de données relatives à des planètes vous aideront à comprendre les principes de base de l’interrogation de données JSON dans Athena :

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

Vous remarquerez que chaque enregistrement (chaque ligne de la table) se trouve sur une ligne distincte. Pour interroger ces données JSON, vous pouvez utiliser une instruction `CREATE TABLE` de ce type :

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

Pour interroger les données, utilisez une instruction `SELECT` simple semblable à celle présentée dans l’exemple ci-dessous :

```
SELECT * FROM planets_json
```

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


****  

| \# | name | distancefromsun | orbitalperiod | daylength | 
| --- | --- | --- | --- | --- | 
| 1 | Mercury | 0,39 | 0,24 | 58,65 | 
| 2 | Venus | 0,72 | 0,62 | 243,02 | 
| 3 | Earth | 1.0 | 1.0 | 1.0 | 
| 4 | Mars | 1,52 | 1,88 | 1,03 | 

Vous remarquez que l’instruction `CREATE TABLE` utilise le [OpenX JSON SerDe](openx-json-serde.md), ce qui nécessite que chaque enregistrement JSON se trouve sur une ligne distincte. Si le JSON est au 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 [Amazon Ion Hive SerDe](ion-serde.md) au lieu d'OpenX. SerDe Examinez les données précédentes stockées au 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 procéder à une remise en forme, vous pouvez utiliser une instruction `CREATE TABLE` semblable à celle présentée dans l’exemple ci-dessous. 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://amzn-s3-demo-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, consultez[Création de tables Amazon Ion](ion-serde-using-create-table.md).

L’exemple de données JSON précédent ne contient pas de types de données complexes tels que des tableaux ou des structures imbriqués. Pour plus d’informations sur l’interrogation de données JSON imbriquées, consultez [Exemple : désérialisation des données JSON imbriquées](openx-json-serde.md#nested-json-serde-example).

**Topics**
+ [Bonnes pratiques pour la lecture des données JSON](parsing-json-data.md)
+ [Extraction de données JSON à partir de chaînes](extracting-data-from-JSON.md)
+ [Recherche de valeurs dans les tableaux JSON](searching-for-values.md)
+ [Obtention de la longueur et de la taille de tableaux JSON](length-and-size.md)
+ [Résolution des problèmes de requêtes JSON](json-troubleshooting.md)