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-11-23

La clause UNNEST est utilisée pour désimbriquer un tableau imbriqué et effectuer une jointure entre elle et son tableau parent.

Le mot-clé UNNEST doit être suivi de l'expression retournant le tableau imbriqué. Il doit être un enfant du tableau imbriquant spécifié dans la clause FROM ou UNNEST parente :
FROM parent_expression UNNEST child_expression     

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 tableaux 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, il n'est pas nécessaire qu'ils contiennent un préfixe avec l'alias du tableau. Cependant, comme les deux tableaux orders et items contiennent un élément id, vous devez utiliser l'alias pour spécifier lequel doit être retourné. 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
   }
]