Scénario 7 : Restructurer des données produit à l'aide de différents éléments de boucle - 6.1

Composants Talend Guide de référence

EnrichVersion
6.1
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Data Integration
Talend Data Management Platform
Talend Data Services Platform
Talend ESB
Talend MDM Platform
Talend Open Studio for Big Data
Talend Open Studio for Data Integration
Talend Open Studio for Data Quality
Talend Open Studio for ESB
Talend Open Studio for MDM
Talend Real-Time Big Data Platform
task
Création et développement
Gouvernance de données
Qualité et préparation de données
EnrichPlatform
Studio Talend

Ce scénario utilise un Job à quatre composants pour restructurer les données produit fournies par un fichier XML source, ProductsIn.xml à l'aide de différents éléments de boucle (loop element).

Les composants utilisés sont :

  • un tFileInputXML : lit les données produit source et les passe au tXMLMap.

  • un tXMLMap : transforme le flux d'entrée pour lui donner la structure simplifiée attendue.

  • un tLogRow : affiche les résultats d'exécution dans la console.

  • un tFileOutputXML : écrit un flux de sortie dans un fichier XML.

Le contenu du fichier XML source ProductsIn.xml se présente comme suit :

<?xml version="1.0" encoding="ISO-8859-15"?>
<products category="1" name="laptop">

	<!-- Summary -->
	<summary>
		<company>DELL, HP</company>
		<sales unit="Dollars">12345678910.12345</sales>
		<model>business</model>
	</summary>

	<!-- Loop1 manufacture -->
	<manufacture id="manu_1" date="2012-10-30">
		<name>DELL</name>
	</manufacture>
	<manufacture id="manu_2" date="2012-10-28">
		<name>HP</name>
	</manufacture>

	<!-- Loop2 types -->
	<types model="business1">
		<type>DELL123</type>
		<manufacture_id>manu_1</manufacture_id>
	</types>
	<types model="business2">
		<type>HP123</type>
		<manufacture_id>manu_2</manufacture_id>
	</types>

	<!-- Loop3 sale -->
	<sales>
		<sale unit="Dollars" type="DELL123">
			<quater>1</quater>
			<income>12345</income>
		</sale>
		<sale unit="Dollars" type="HP123">
			<quater>1</quater>
			<income>12345.123</income>
		</sale>
	</sales>
</products>

L'objectif de ce scénario est la restructuration de données produits est de simplifier la présentation des informations produit afin de réutiliser le fichier pour la manufacture. Les données attendues se présentent comme suit. L'élément racine est modifié à manufacturers, les informations relatives aux ventes sont consolidées dans l'élément sale et l'élément manufacturer est réduit à un niveau.

<?xml version="1.0" encoding="ISO-8859-15"?>
<manufacturers category="1" name="laptop">
  <sales unit="Dollars">
    <sale sales_type="DELL123">12345.0</sale>
    <sale sales_type="HP123">12345.123</sale>
  </sales>
  <manufacturer id="manu_1" date="03-04-0036" name="DELL"/>
  <manufacturer id="manu_2" date="04-04-0034" name="HP"/>
  <types>
    <type>DELL123</type>
    <manufacturer_id>manu_1</manufacturer_id>
  </types>
  <types>
    <type>DELL123</type>
    <manufacturer_id>manu_2</manufacturer_id>
  </types>
  <types>
    <type>HP123</type>
    <manufacturer_id>manu_1</manufacturer_id>
  </types>
  <types>
    <type>HP123</type>
    <manufacturer_id>manu_2</manufacturer_id>
  </types>
</manufacturers>

Ajouter et relier les composants

  1. Créez un nouveau Job et ajoutez un tFileInputXML, un tXMLMap, un tLogRow et un tFileOutputXML de la Palette en saisissant leur nom dans l'espace de modélisation graphique ou en les déposant depuis la Palette.

  2. Reliez le tFileInputXML au tXMLMap à l'aide d'un lien Row > Main.

  3. Reliez le tXMLMap au tLogRow à l'aide d'un lien Row > *New Output* (Main). Dans la boîte de dialogue qui s'ouvre, saisissez le nom de la connexion de sortie, outDoc dans cet exemple.

  4. Reliez le tLogRow au tFileOutputXML à l'aide d'un lien Row > Main.

Configurer le flux d'entrée

  1. Double-cliquez sur le tFileInputXML pour ouvrir sa vue Basic settings.

  2. Cliquez sur le bouton [...] à côté du champ Edit schema et dans la boîte de dialogue [Schema], définissez le schéma en ajoutant une colonne doc de type Document.

  3. Cliquez sur OK afin de valider les modifications et fermer la boîte de dialogue. Une ligne est ajoutée automatiquement à la table Mapping.

  4. Dans le champ File name/Stream, parcourez votre système ou saisissez entre guillemets doubles le chemin d'accès au fichier source XML fournissant les données d'entrée produits. Dans ce scénario, saisissez E:/ProductsIn.xml.

  5. Dans le champ Loop XPath query, saisissez une expression XPath entre guillemets doubles pour spécifier le nœud sur lequel se base la boucle. Dans ce scénario, saisissez /, ce qui signifie effectuer une requête de recherche depuis la racine.

  6. Dans la colonne XPath query de la table Mapping, saisissez entre guillemets doubles les champs à interroger. Dans ce scénario, saisissez ., ce qui signifie que tous les champs du nœud actuel (racine) seront extraits.

  7. Dans la colonne Get Nodes de la table Mapping, cochez la case correspondante.

Configurer le tXMLMap avec différentes boucles

  1. Double-cliquez sur le composant tXMLMap pour ouvrir le Map Editor.

    Notez que la zone d'entrée est déjà renseignée avec la structure XML simple par défaut et que la table du haut est la table d'entrée principale.

  2. Dans la table d'entrée row1, cliquez-droit sur le nœud doc et, dans le menu contextuel, sélectionnez Import From File. Dans la boîte de dialogue qui s'ouvre, parcourez votre système jusqu'au fichier source XML pour importer la structure XML à utiliser par les données reçues par le tXMLMap. Dans ce scénario, le fichier source XML est ProductsIn.xml et il contient les données d'entrée du tFileInputXML.

  3. Dans l'arborescence XML importée, cliquez-droit sur le nœud manufacturer et sélectionnez As loop element dans le menu contextuel afin de le définir comme élément de boucle. Répétez l'opération avec les nœuds types et sale, respectivement.

  4. Dans la partie inférieure de l'éditeur de mapping, cliquez sur l'onglet Schema editor pour afficher la vue correspondante. Du côté droit de la vue, ajoutez au schéma une colonne outDoc de type Document. la racine XML correspondante est automatiquement ajoutée à la table de sortie, du côté du flux de sortie.

  5. Dans la table outDoc de sortie, importez la structure XML des données à utiliser depuis le fichier XML contenant les données de sortie attendues et fournit la structure XML attendue.

    Cliquez-droit sur le nœud sale de la table de sortie et sélectionnez As loop element dans le menu contextuel. Répétez l'opération avec les nœuds manufacturer et types.

  6. Dans la table d'entrée row1, cliquez sur le nœud @category et déposez-le dans le champ Expression, dans la ligne du nœud @category dans la table de sortie outDoc.

    Répétez l'opération afin de mapper les nœuds suivants :

    • @name à @name.

    • @unit sous le nœud summary à @unit.

    • @id à @id et à manufacture id, respectivement.

    • @date à @date.

    • name à @name.

    • type à type.

    • @type à @sales_type.

    • income à sale (loop).

  7. En haut de la table outDoc de sortie, cliquez sur l'icône de clé anglaise et configurez la valeur de la propriété All in one à true afin de générer un flux XML. Pour plus d'informations concernant la fonctionnalité All in one, consultez le Guide utilisateur du Studio Talend.

  8. Cliquez sur le bouton [...] à côté de l'élément de boucle manufacture et, dans la boîte de dialogue [Configure source loops] qui s'ouvre, cliquez une fois sur le bouton [+] pour ajouter une boucle source, manufacturer. Répétez l'opération pour ajouter une boucle source sale pour l'élément de boucle sale.

  9. Cliquez sur le bouton [...] à côté de l'élément boucle types et, dans la boîte de dialogue [Configure source loop], ajoutez deux boucles source, types et manufacturer. Assurez-vous que le numéro de séquence des types de la boucle source 0. Ainsi, la partie relative du flux de sortie sera triée selon les valeurs de l'élément type.

    Note

    Lorsqu'un élément de boucle reçoit des mappings d'un ou plusieurs élément(s) de boucle du flux d'entrée, cela vous permet de configurer la séquence des boucles en entrée. Par exemple, dans ce scénario, l'élément de boucle types du flux de sortie est mappé avec le nœud @id, appartenant à l'élément de boucle manufacturer et avec le nœud type, appartenant à l'élément de boucle types du flux d'entrée. Le flux de sortie est trié selon la boucle primaire types.

  10. Cliquez sur OK pour valider les mappings et fermer le Map Editor.

Configurer le flux de sortie

  1. Double-cliquez sur le tLogRow pour ouvrir sa vue Basic settings.

  2. Cliquez sur le bouton Sync columns pour récupérer le schéma du composant précédent et acceptez la propagation proposée par la boîte de dialogue qui s'ouvre.

  3. Double-cliquez sur le tFileOutputXML pour ouvrir sa vue Basic settings.

  4. Dans le champ File Name, parcourez votre système ou saisissez le chemin d'accès au fichier dans lequel les données de sortie seront écrites. Dans ce scénario, le chemin d'accès est E:/ProductsOut.xml.

Sauvegarder et exécuter le Job

  1. Appuyez sur les touches Ctrl+S afin de sauvegarder le Job.

  2. Appuyez sur F6 pour l'exécuter.

Comme affiché ci-dessus, les données produit d'entrée sont restructurées comme prévu et les données de sortie s'affichent dans la console et sont écrites dans le fichier XML ProductsOut.xml.