Utiliser la clause UNNEST - 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-09-14

La clause UNNEST est utilisée pour désimbriquer une collection imbriquée et effectuer une jointure entre elle et sa collection parente.

Le mot-clé UNNEST doit être suivi de l'identifiant de la collection imbriquée. Il doit être un enfant de la collection imbriquante spécifiée dans la clause FROM ou UNNEST :
FROM parent_identifier UNNEST child_identifier     

Vous pouvez utiliser les mots-clés AS et INDEX dans la clause UNNEST. Vous pouvez également avoir plusieurs clauses UNNEST consécutives.

Lors de l'utilisation d'une ou de plusieurs clause·s UNNEST sans alias, tous les identifiants utilisés dans la requête sans chemin absolu sont traités comme étant relatifs à l'identifiant dans la dernière clause UNNEST ou à sa clause parente si un identifiant dans la requête ne fait pas partie de la dernière clause.

Par exemple, avec les données d'entrée suivantes :
{
   "customers":[
      {
         "name":"John Smith",
         "orders":[
            {
               "id":"abc-12345",
               "items":[
                  {
                     "id":"97516848-jiargn",
                     "quantity":2
                  }
               ]
            }
         ]
      },
      {
         "name":"Jane Doe",
         "orders":[
            {
               "id":"def-12345",
               "items":[
                  {
                     "id":"97516848-kftesn",
                     "quantity":3
                  },
                  {
                     "id":"96946848-metasb",
                     "quantity":1
                  }
               ]
            }
         ]
      }
   ]
}
Vous pouvez utiliser deux clauses UNNEST pour obtenir les données dans les collections customers, orders et items au même niveau :
FROM customers UNNEST orders AS o UNNEST items AS i
SELECT {
	customer_name = name,
	order_id = o.id,
	item_id = i.id,
	item_quantity = quantity
}
Comme les identifiants name et quantity sont uniques, ils ne doivent pas contenir de préfixe avec l'alias de connexion. Cependant, comme les deux collections orders et items contiennent un élément id, vous devez utiliser l'alias pour spécifier laquelle doit être retournée. Cette requête retourne le résultat suivant :
[
   {
      "customer_name":"John Smith",
      "order_id":"abc-12345",
      "item_id":"97516848-jiargn",
      "item_quantity":2
   },
   {
      "customer_name":"Jane Doe",
      "order_id":"def-12345",
      "item_id":"97516848-kftesn",
      "item_quantity":3
   },
   {
      "customer_name":"Jane Doe",
      "order_id":"def-12345",
      "item_id":"96946848-metasb",
      "item_quantity":1
   }
]