Fusionne deux tableaux en se basant sur des conditions - 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
Utilisez le mot-clé UNION ALL avec des conditions afin de fusionner deux tableaux en un et d'itérer sur son contenu.

Pourquoi et quand exécuter cette tâche

Cet exemple utilise le JSON d'entrée ci-dessous. Il contient un élément customers avec deux tableaux : Platinum et Gold. Chaque tableau contient les trois mêmes éléments : region, cid et name. L'objectif est de créer un tableau unique.
{
	"customers": {
		"Platinum": [
			{
				"region": "West Midlands",
				"cid": 12,
				"name": "E. W. Gilbert"
			},
			{
				"region": "Greater Manchester",
				"cid": 75,
				"name": "John Doe"
			}
		],
		"Gold": [
			{
				"region": "West Midlands",
				"cid": 13,
				"name": "G. K. Peatling"
			},
			{
				"region": "Greater Manchester",
				"cid": 76,
				"name": "Tom Cruise"
			}
		]
	}
}

Procédure

  1. Créez les clauses FROM et SELECT pour créer le nouveau tableau customers.
    FROM customers
    SELECT {
       customers =
          []
    }
  2. Dans ce nouveau tableau, créez une première sous-requête pour itérer sur le tableau d'entrée Platinum.

    Vous pouvez utiliser une expression conditionnelle avec le mot-clé IF afin de vérifier que le tableau Platinum contient une valeur.

    FROM customers
    SELECT {
       customers =
          [
             IF (hasValue(Platinum)) (
                FROM Platinum
                SELECT {
                   region = region,
                   cid = cid,
                   name = name,
                   ranking = "Platinum"
                }
             )
          ]
    }
  3. Créez une autre sous-requête sur le tableau Gold et utilisez le mot-clé UNION ALL pour fusionner les deux tableaux dans le nouveau tableau customers.

    Après le mot-clé UNION ALL, vous pouvez inclure une expression conditionnelle afin de vérifier que le tableau Gold contient une valeur.

    FROM customers
    SELECT {
       customers =
          [
             IF (hasValue(Platinum)) (
                FROM Platinum
                SELECT {
                   region = region,
                   cid = cid,
                   name = name,
                   ranking = "Platinum"
                }
             )
             UNION ALL
             IF (hasValue(Gold)) (
                FROM Gold
                SELECT {
                   region = region,
                   cid = cid,
                   name = name,
                   ranking = "Gold"
                }
             )
          ]
    }

Résultats

Cette requête retourne le résultat suivant :
[
	{
		"customers": [
			{
				"region": "West Midlands",
				"cid": 12,
				"name": "E. W. Gilbert",
				"ranking": "Platinum"
			},
			{
				"region": "Greater Manchester",
				"cid": 75,
				"name": "John Doe",
				"ranking": "Platinum"
			},
			{
				"region": "West Midlands",
				"cid": 13,
				"name": "G. K. Peatling",
				"ranking": "Gold"
			},
			{
				"region": "Greater Manchester",
				"cid": 76,
				"name": "Tom Cruise",
				"ranking": "Gold"
			}
		]
	}
]