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émentcategory
dont la valeur estStandard
ainsi que la ville de résidence du client ou de la cliente. - Sinon,
info
contient l'élémentcategory
dont la valeur estGold
, 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
-
Créez la clause
FROM customer
pour appeler le tableaucustomer
. -
Créez une clause
SELECT
pour retourner l'entréename
et un nouvel élément nomméinfo
. -
Définissez l'expression conditionnelle à utiliser comme valeur pour
info
:-
Configurez la valeur d'
info
à'No info'
si le client ou la cliente n'a pas de note :IF (rating == null) 'No info'
. -
Configurez la valeur d'
info
à un objet ayant un élémentcategory
avec la valeur'Standard'
et la ville du client ou de la cliente si la valeur derating
est comprise entre 0 et 600 :ELSEIF rating BETWEEN 0 AND 600 { category = 'Standard', city = address.city }
. -
Pour tous les autres cas, configurez la valeur d'
info
à un objet ayant un élémentcategory
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) }
.
-
Configurez la valeur d'
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"
}
}
]