Attribuer des valeurs basées sur des conditions - Cloud

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

Version
Cloud
Language
Français (France)
Product
Talend Cloud
Module
Data Shaping Language
Content
Création et développement
Utilisez Data Shaping Language pour produire des enregistrements avec des valeurs basées sur des conditions.

Pourquoi et quand exécuter cette tâche

Cet exemple utilise le JSON d'entrée ci-dessous. Il contient un tableau customer, qui contient l'identifiant, le nom, l'adresse et la note de chaque client·e.

L'objectif de cette transformation est de retourner un tableau de client·es avec un élément name et un élément info. La valeur d'info change selon la valeur de la note rating :
  • Si le·a client·e n'a pas de note, info est une chaîne de caractères dont la valeur est 'No info'.
  • Si le·a client·e a une note comprise entre 0 et 600, info est un objet contenant un élément category dont la valeur est Standard ainsi que la ville de résidence du client ou de la cliente.
  • Sinon, info contient l'élément category dont la valeur est Gold, ainsi que l'adresse complète du client ou de la cliente.
{
  "customer": [
    {
      "custid": "C13",
      "name": "T. Cruise",
      "address": {
        "street": "201 Main St.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      },
      "rating": 750
    },
    {
      "custid": "C25",
      "name": "M. Streep",
      "address": {
        "street": "690 River St.",
        "city": "Hanover, MA",
        "zipcode": "02340"
      },
      "rating": 690
    },
    {
      "custid": "C31",
      "name": "B. Pitt",
      "address": {
        "street": "360 Mountain Ave.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      }
    },
    {
      "custid": "C35",
      "name": "J. Roberts",
      "address": {
        "street": "420 Green St.",
        "city": "Boston, MA",
        "zipcode": "02115"
      },
      "rating": 565
    },
    {
      "custid": "C37",
      "name": "T. Hanks",
      "address": {
        "street": "120 Harbor Blvd.",
        "city": "Boston, MA",
        "zipcode": "02115"
      },
      "rating": 750
    },
    {
      "custid": "C41",
      "name": "R. Duvall",
      "address": {
        "street": "150 Market St.",
        "city": "St. Louis, MO",
        "zipcode": "63101"
      },
      "rating": 640
    },
    {
      "custid": "C47",
      "name": "S. Loren",
      "address": {
        "street": "Via del Corso",
        "city": "Rome, Italy"
      },
      "rating": 625
    }
  ]
}

Procédure

  1. Créez la clause FROM customer pour appeler le tableau customer.
  2. Créez une clause SELECT pour retourner l'entrée name et un nouvel élément nommé info.
  3. Définissez l'expression conditionnelle à utiliser comme valeur pour info :
    1. Configurez la valeur d'info à 'No info' si le client ou la cliente n'a pas de note : IF (rating == null) 'No info'.
    2. Configurez la valeur d'info à un objet ayant un élément category avec la valeur 'Standard' et la ville du client ou de la cliente si la valeur de rating est comprise entre 0 et 600 : ELSEIF rating BETWEEN 0 AND 600 { category = 'Standard', city = address.city }.
    3. Pour tous les autres cas, configurez la valeur d'info à un objet ayant un élément category avec la valeur 'Gold' et l'adresse complète du client ou de la cliente, le tout concaténé en une chaîne de caractères : ELSE { category = 'Gold', address = concatWith(', ', address.street, address.city) }.

Résultats

La requête doit ressembler à ceci :
FROM customer
SELECT {
   name,
   info =
      IF (rating == null) 
		'No info'
      ELSEIF rating BETWEEN 0 AND 600 { 
			category = 'Standard', 
			city = address.city 
		}
      ELSE { 
	  category = 'Gold', 
	  address = concatWith(', ', address.street, address.city) 
	  }
}
Elle retourne le résultat suivant :
[
    {
        "name": "T. Cruise",
        "info": {
            "category": "Gold",
            "address": "201 Main St., St. Louis, MO"
        }
    },
    {
        "name": "M. Streep",
        "info": {
            "category": "Gold",
            "address": "690 River St., Hanover, MA"
        }
    },
    {
        "name": "B. Pitt",
        "info": "No info"
    },
    {
        "name": "J. Roberts",
        "info": {
            "category": "Standard",
            "city": "Boston, MA"
        }
    },
    {
        "name": "T. Hanks",
        "info": {
            "category": "Gold",
            "address": "120 Harbor Blvd., Boston, MA"
        }
    },
    {
        "name": "R. Duvall",
        "info": {
            "category": "Gold",
            "address": "150 Market St., St. Louis, MO"
        }
    },
    {
        "name": "S. Loren",
        "info": {
            "category": "Gold",
            "address": "Via del Corso, Rome, Italy"
        }
    }
]