Accéder au contenu principal Passer au contenu complémentaire

Utiliser le type de schéma map

Un schéma map est un tableau d'entrées contenant une clé et une valeur.

Créer une map

Vous pouvez créer une map à partir de données existantes, à l'aide d'une clause SELECT ENTRY. Cela vous permet de définir un identifiant ou une expression à utiliser en tant que clé et de définir un identifiant, une expression ou une sous-requête à utiliser en tant que valeur. La clause doit être structurée comme ceci :
SELECT ENTRY {
  key = expression,
  value = expression or sub-query
  }
Vous pouvez implicitement attribuer un identifiant comme clé ou valeur de la map, avec la syntaxe suivante :
SELECT ENTRY {
  key identifier, value identifier
}
Dans ce cas, la valeur du premier identifiant est utilisée comme clé et la valeur du second identifiant est utilisée comme valeur. Si au moins l'un des éléments de map est explicitement attribué, l'ordre n'est pas important.
Par exemple, avec les données d'entrée suivantes :
{
   "order":[
      {
         "orderno":1001,
         "custid":"C41",
         "order_date":"2017-04-29",
         "ship_date":"2017-05-03",
         "items":[
            {
               "itemno":347,
               "qty":5,
               "price":19.99
            },
            {
               "itemno":193,
               "qty":2,
               "price":28.89
            }
         ]
      },
      {
         "orderno":1002,
         "custid":"C13",
         "order_date":"2017-05-01",
         "ship_date":"2017-05-03",
         "items":[
            {
               "itemno":460,
               "qty":95,
               "price":100.99
            },
            {
               "itemno":680,
               "qty":150,
               "price":8.75
            }
         ]
      }
   ]
}
Vous pouvez utiliser la requête suivante pour créer une map dans laquelle la clé est l'élément orderno et la valeur est un tableau d'éléments itemno :
FROM order
SELECT ENTRY {
  value = (
    FROM items
    SELECT itemno
  ),
  orderno
}
Dans ce cas, le résultat suivant est retourné :
{
   "1001":[
      347,
      193
   ],
   "1002":[
      460,
      680
   ]
}
Vous pouvez également convertir un enregistrement en map à l'aide de la fonction toMap. Par exemple, avec la valeur d'entrée utilisée ci-dessus, vous pouvez utiliser la requête suivante pour convertir l'enregistrement order en une map, ce qui vous permet d'appeler des éléments de map à l'aide de leur clé, en suivant la syntaxe map_identifier['key'].
FROM order AS o
LET $o = toMap(o)
SELECT {
  id = concatWith('-',$o['custid'], $o['orderno']),
  total = (
    FROM items
    SELECT sum(price)
  )
}
Le résultat suivant est retourné :
[
   {
      "id":"C41-1001",
      "total":48.88
   },
   {
      "id":"C13-1002",
      "total":109.74
   }
]

Pour plus d'informations concernant la fonction toMap, consultez Fonctions spéciales.

Lire une map

Lorsque vos données contiennent une map, vous pouvez sélectionner ses clés et valeurs dans votre requête. Par exemple, avec une entrée nommée properties contenant les données suivantes :
{
   "author":"Margaret Atwood",
   "title":"The Handmaid's Tale",
   "isbn":"978-0099740919"
}
Vous pouvez lire le contenu JSON en tant que map à l'aide du schéma Avro suivant :
{
   "type":"map",
   "name":"properties",
   "values":"string"
}
Vous pouvez ensuite utiliser cette requête pour retourner un tableau d'enregistrements ayant un élément contenant la clé et un autre contenant la valeur :
FROM properties.entry
SELECT {key, value} 
Cette requête retourne le résultat suivant :
[
   {
      "key":"author",
      "value":"Margaret Atwood"
   },
   {
      "key":"title",
      "value":"The Handmaid's Tale"
   },
   {
      "key":"isbn",
      "value":"978-0099740919"
   }
]

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.