Scénario 5 : Mapper des données à l'aide d'un élément "group"

Composants Talend Open Studio Guide de référence

EnrichVersion
6.3
EnrichProdName
Talend Open Studio for Data Quality
Talend Open Studio for Big Data
Talend Open Studio for ESB
Talend Open Studio for MDM
Talend Open Studio for Data Integration
task
Gouvernance de données
Qualité et préparation de données
Création et développement
EnrichPlatform
Studio Talend

Ce scénario se base sur le Job utilisé dans Scénario 2 : Créer un flux Lookup pour effectuer une jointure sur des données complémentaires et explique comment définir un élément en tant que group element dans le Map Editor du tXMLMap afin de regrouper les données de sortie. Pour plus d'informations concernant le regroupement de données de sortie à l'aide du composant tXMLMap, consultez le Guide utilisateur du Studio Talend.

L'objectif de ce scénario est de regrouper les IDs des clients et les informations relatives aux clients, selon l'Etat dans lequel ils résident. Vous devez reconstruire l'arborescence XML de la table de sortie Customer, en prenant en compte les facteurs suivants :

  • Les éléments relatifs à l'ID et au nom des clients doivent être situés sous l'élément de boucle. Ils sont donc des sous-éléments de la boucle.

  • L'élément de boucle et ses sous-éléments doivent dépendre directement de l'élément de groupe.

  • L'élément relatif aux informations d'Etat utilisé comme condition de groupe doit dépendre directement de l'élément de groupe.

  • L'élément de groupe ne peut pas être l'élément racine.

A partir de cette analyse, la structure XML des données de sortie doit se présenter comme suit. Le nœud customers est le nœud racine, le nœud customer est configuré comme l'élément de groupe et les données de sortie dont groupées selon l'élément LabelState

Pour qu'un élément de groupe agisse, les données XML à traiter doivent avoir été triées, par exemple via vos outils XML, autour de l'élément qui sera utilisé comme condition de regroupement. Dans cet exemple, les clients ayant un même ID d'État doivent être regroupés. Les données d'entrée du fichier XML Customer.xml doivent se présenter comme suit :

<?xml version="1.0" encoding="ISO-8859-15"?>
<Customers>
	<Customer RegisterTime="2001-01-17 06:26:40.000">
		<Name>
			<id>1</id>
			<CustomerName>Griffith Paving and Sealcoatin</CustomerName>
		</Name>
		<Address>
			<CustomerAddress>talend@apres91</CustomerAddress>
			<idState>2</idState>
		</Address>
		<Revenue>
			<Sum1>67852</Sum1>
		</Revenue>
	</Customer>
	<Customer RegisterTime="1987-02-23 17:33:20.000">
		<Name>
			<id>3</id>
			<CustomerName>Glenn Oaks Office Supplies</CustomerName>
		</Name>
		<Address>
			<CustomerAddress>1859 Green Bay Rd.</CustomerAddress>
			<idState>2</idState>
		</Address>
		<Revenue>
			<Sum1>1225.</Sum1>
		</Revenue>
	</Customer>
	<Customer RegisterTime="2002-06-07 09:40:00.000">
		<Name>
			<id>2</id>
			<CustomerName>Bill's Dive Shop</CustomerName>
		</Name>
		<Address>
			<CustomerAddress>511 Maple Ave. Apt. 1B</CustomerAddress>
			<idState>3</idState>
		</Address>
		<Revenue>
			<Sum1>88792</Sum1>
		</Revenue>
	</Customer>
	<Customer RegisterTime="1992-04-28 23:26:40.000">
		<Name>
			<id>4</id>
			<CustomerName>DBN Bank</CustomerName>
		</Name>
		<Address>
			<CustomerAddress>456 Grossman Ln.</CustomerAddress>
			<idState>3</idState>
		</Address>
		<Revenue>
			<Sum1>64493</Sum1>
		</Revenue>
	</Customer>
</Customers>
  1. Dans votre Studio, ouvrez le Job utilisé dans Scénario 2 : Créer un flux Lookup pour effectuer une jointure sur des données complémentaires afin de l'afficher dans l'espace de modélisation graphique et double-cliquez sur le tXMLMap pour ouvrir le Map Editor.

  2. Dans l'arborescence XML de la table de sortie Customer, cliquez-droit sur le nœud customer (loop) et sélectionnez Delete dans le menu contextuel. Tous les éléments sous le nœud racine customers sont supprimés. Vous pouvez reconstruire l'arborescence XML à utiliser pour grouper vos données.

  3. Cliquez-droit sur le nœud racine customers et sélectionnez Create Sub-Element dans le menu contextuel. Dans la boîte de dialogue qui s'ouvre, saisissez le nom du sous-élément, customer, par exemple.

    Cliquez sur OK pour valider les modifications et fermer la boîte de dialogue. Un nœud racine customer est ajouté à la table de sortie.

  4. Dans la table d'entrée row2, sélectionnez le nœud LabelState et déposez-le sur le nœud customer de la table de sortie. Dans la boîte de dialogue qui s'ouvre, sélectionnez Create as sub-element of target node puis cliquez sur OK pour fermer la boîte de dialogue. Un nœud LabelState est ajouté sous le nœud customer dans la table de sortie.

  5. Cliquez-droit sur le nœud customer de la table de sortie et sélectionnez Create Sub-Element dans le menu contextuel. Dans la boîte de dialogue qui s'ouvre, saisissez le nom du nouveau sous-élément. Dans cet exemple, saisissez Name.

    Cliquez sur OK pour valider les modifications et fermer la boîte de dialogue. Un nœud Name est ajouté sous le nœud customer dans la table de sortie.

  6. Dans la table d'entrée row1, sélectionnez les nœuds id et CustomerName et déposez-les sur le nœud Name de la table de sortie. Dans la boîte de dialogue qui s'ouvre, sélectionnez Create as sub-element of target node et cliquez sur OK pour fermer la boîte de dialogue. Un nœud id et un nœud CustomerName sont ajoutés sous le nœud Name de la table de sortie.

  7. Dans la table de sortie, cliquez-droit sur le nœud Name et sélectionnez As loop element dans le menu contextuel pour définir cet élément comme élément de boucle. Cliquez-droit sur le nœud customer et, dans le menu contextuel, sélectionnez As group element afin de regrouper les données de sortie selon l'élément LabelState.

  8. Cliquez sur OK pour valider les modifications et fermer l'éditeur de mapping.

  9. Appuyez sur les touches Ctrl+S afin de sauvegarder votre Job puis sur F6 pour l'exécuter.

Comme affiché ci-dessus, les éléments id et CustomerName contenus dans la boucle sont regroupés dans l'élément LabelState. La balise du group element customer marque le début et la fin de chaque groupe.

Note

Le composant tXMLMap propose les éléments "group" et "aggregate" pour classer les données dans une structure XML. Lors de la gestion d'une ligne de données (flux XML complet), la différence de comportement est la suivante :

  • L'élément "group" traite toujours les données dans un flux unique.

  • L'élément "aggregate" sépare ce flux en différents flux XML complets.