Accéder au contenu principal Passer au contenu complémentaire

Dérouler une boucle dans une map DSQL

Availability-noteBêta
Mappez plusieurs éléments non répétables au même élément de boucle.

Avant de commencer

  • Vous avez créé des structures d'entrée et de sortie. Vous pouvez utiliser les échantillons JSON ci-dessous pour créer vos structures.

Pourquoi et quand exécuter cette tâche

Dans cet exemple, vous allez créer une map DSQL pour extraire des données de trois éléments non répétables les mapper à une seule boucle dans la sortie. Les données d'entrée ressemblent à ceci :
[
    {
        "make": "MBIKE",
        "description": "27.5 inch electric mountain bike",
        "tyres": {
            "brand": "hutchinson",
            "type": "Kraken 29x"
        },
        "seat": {
            "brand": "ergon",
            "type": "SR road sport gel"
        },
        "derailleur": {
            "brand": "shimano",
            "type": "ultegra D12"
        }
    },
    {
        "make": "EBIKE",
        "description": "Electric hybrid bike",
        "tyres": {
            "brand": "vittoria",
            "type": "Gravel terrend mix"
        },
        "seat": {
            "brand": "selle italia",
            "type": "SMTB black L3"
        },
        "derailleur": {
            "brand": "sram",
            "type": "GX 10"
        }
    },
    {
        "make": "WBIKE",
        "description": "Women's road bike",
        "tyres": {
            "brand": "michelin",
            "type": "power cup flex"
        },
        "seat": {
            "brand": "xlc",
            "type": "geltech ergo"
        },
        "derailleur": {
            "brand": "ceramicspeed",
            "type": "Eagle EAX"
        }
    }
]
La structure de sortie ressemble à ceci :
[
    {
        "make": "",
        "description": "",
        "accessories": [
            {
                "category": "",
                "brand": "",
                "type": ""
            }
        ]
    }
]

Procédure

  1. Créez une DSQL Map (Map DSQL) et ajoutez les structures d'entrée et de sortie.
    Un premier mapping entre les éléments racine est automatiquement créé. Vous pouvez voir l'expression Data Shaping Query Language correspondante dans l'élément racine de la structure de sortie.
  2. Cliquez-droit sur l'élément accessories dans la structure de sortie et cliquez sur Unroll (Dérouler), puis répétez cette étape.
    Cela crée deux éléments non répétables identiques. Ils sont nécessaires pour mapper les éléments d'entrée tyres, seat et derailleur à la même boucle de sortie accessories. Même si la structure de la map affiche trois éléments accessories différents après avoir déroulé les éléments, la sortie contiendra un seul tableau accessories avec le contenu des trois éléments.
  3. Mappez les éléments suivants à l'aide du glisser-déposer :
    • bikesaccessories.make à bikesaccessorieslist.make
    • bikesaccessories.description à bikesaccessorieslist.description
    • bikesaccessories.tyres au premier bikesaccessorieslist.accessories
    • bikesaccessories.seat au second bikesaccessorieslist.accessories
    • bikesaccessories.derailleur au troisième bikesaccessorieslist.accessories
    Note InformationsConseil : Si nécessaire, vous pouvez déplacer ou supprimer un élément déroulé en cliquant-droit dessus et en sélectionnant Move Up (Monter), Move Down (Descendre) ou Delete (Supprimer).
  4. Cliquez sur l'élément category sous le premier élément accessories et saisissez 'tyres' dans l'éditeur d'expression.
  5. Répétez l'étape précédente pour les deuxième et troisième éléments accessories et saisissez 'seat' et 'derailleur', respectivement.

Résultats

Votre map est configurée. Vous pouvez utiliser la fonction Test Run (Exécution de test) pour consulter les résultats. Dans cet exemple, le résultat suivant est retourné :
[
   {
      "make":"MBIKE",
      "description":"27.5 inch electric mountain bike",
      "accessories":[
         {
            "category":"tyres",
            "brand":"hutchinson",
            "type":"Kraken 29x"
         },
         {
            "category":"seat",
            "brand":"ergon",
            "type":"SR road sport gel"
         },
         {
            "category":"derailleur",
            "brand":"shimano",
            "type":"ultegra D12"
         }
      ]
   },
   {
      "make":"EBIKE",
      "description":"Electric hybrid bike",
      "accessories":[
         {
            "category":"tyres",
            "brand":"vittoria",
            "type":"Gravel terrend mix"
         },
         {
            "category":"seat",
            "brand":"selle italia",
            "type":"SMTB black L3"
         },
         {
            "category":"derailleur",
            "brand":"sram",
            "type":"GX 10"
         }
      ]
   },
   {
      "make":"WBIKE",
      "description":"Women's road bike",
      "accessories":[
         {
            "category":"tyres",
            "brand":"michelin",
            "type":"power cup flex"
         },
         {
            "category":"seat",
            "brand":"xlc",
            "type":"geltech ergo"
         },
         {
            "category":"derailleur",
            "brand":"ceramicspeed",
            "type":"Eagle EAX"
         }
      ]
   }
   ]
Vous pouvez également consulter la vue DSQL Script (Script DSQL) pour voir comment cela est géré avec Data Shaping Query Language et l'utilisation de la clause UNION ALL. Pour plus d'informations, consultez le Guide de référence de Talend Data Shaping Language. Dans cet exemple, le script suivant est généré :
FROM bikesaccessories
SELECT {
   make = make,
   description = description,
   accessories = (
      SELECT {
         category = 'tyres',
         brand = tyres.brand,
         type = tyres.type
      }
      UNION ALL
      SELECT {
         category = 'seat',
         brand = seat.brand,
         type = seat.type
      }
      UNION ALL
      FROM 1 TO 1
      SELECT {
         category = 'derailleur',
         brand = derailleur.brand,
         type = derailleur.type
      }
   )
}

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – dites-nous comment nous améliorer !