Utiliser le type de schéma map - Cloud - 8.0

Guide de référence de Talend Data Shaping Language

Version
Cloud
8.0
Language
Français
Product
Talend Cloud
Module
Data Shaping Language
Content
Création et développement
Last publication date
2023-11-23

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

Remarque : Cette fonctionnalité est disponible uniquement dans Talend Data Mapper.

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
SELECT {key, value}
Important : Dans Talend Data Mapper, vous devez ajouter .entry après le nom de la map pour effectuer l'itération sur les entrées de map. Dans cet exemple, la requête correcte est
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"
   }
]