Scénario 2 : Modifier le fichier de règle manuellement afin de coder les conditions à utiliser pour créer un enregistrement consolidé - 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

Dans un Job, le composant tRuleSurvivorship génère un ensemble de règles de consolidation basées sur les conditions définies dans la table Rule table, dans la vue Basic settings.

Si vous souhaitez que les enregistrements soient consolidés selon un ou plusieurs critère(s) avancé(s), vous devez coder manuellement les conditions dans la règle à l'aide du langage Drools.

Le Job de ce scénario fournit un exemple complet concernant la modification complète du code de la règle générée par le composant, afin d'utiliser des conditions spécifiées pour créer un enregistrement consolidé. Vous pouvez utiliser cet enregistrement consolidé, par exemple pour créer une copie maître des données pour MDM.

Les composants utilisés dans ce Job sont :

  • un tFixedFlowInput : pour fournir les données d'entrée à traiter dans le Job.

  • un tRuleSurvivorship : pour créer le flux de validation de consolidation à partir des conditions codées dans la règle. Ce composant sélectionne les meilleures données composant la représentation unique de chaque groupe de doublons.

  • un tLogRow : pour afficher les résultats de l'exécution du Job.

Construire le Job

  1. Déposez un tFixedFlowInput, un tRuleSurvivorship et un tLogRow de la Palette dans l'espace de modélisation graphique.

  2. Cliquez-droit sur le tFixedFlowInput et sélectionnez le lien Row > Main afin de connecter ce composant au tRuleSurvivorship.

  3. Répétez l'opération pour connecter le tRuleSurvivorship au tLogRow à l'aide d'un lien Row > Main .

Configurer les enregistrements d'entrée

  1. Double-cliquez sur le tFixedFlowInput pour ouvrir sa vue Component.

  2. Cliquez sur le bouton [...] à côté du champ Edit schema pour ouvrir l'éditeur de schéma.

  3. Cliquez cinq fois sur le bouton [+] pour ajouter cinq lignes.

    Renommez respectivement ces lignes : Record_ID, File, Acctname, GRP_ID et GRP_SIZE.

    Les données d'entrée contiennent des informations concernant un ID de groupe, ainsi que la taille du groupe. Dans un scénario réel, ces informations peuvent être rassemblées par le composant tMatchGroup comme dans le scénario 1. Le tMatchGroup regroupe les doublons des données d'entrée et donne à chaque groupe un ID et une taille. Ces deux colonnes sont requises par le tRuleSurvivorship.

  4. Dans la colonne Type, sélectionnez les types de données pour les colonnes. Dans cet exemple, configurez le type à Integer pour Record_ID et GRP_SIZE et configurez à String pour les autres colonnes.

    Note

    Assurez-vous de configurer le bon type de date afin de pouvoir définir les règles de validation sans message d'erreur.

  5. Cliquez sur OK pour valider ces modifications et accepter la propagation lorsque celle-ci est proposée par la boîte de dialogue.

  6. Dans la zone Mode de la vue Basic settings, sélectionnez Use Inline Content (delimited file).

  7. Dans le champ Content, saisissez les données d'entrée à traiter.

    Ces données doivent correspondre au schéma défini. Dans cet exemple, les données d'entrée se présentent comme suit :

    1;2;AcmeFromFile2;1;2
    2;1;AcmeFromFile1;1;0
    3;1;AAA;2;1
    4;2;BBB;3;1
    5;1;  ;4;2
    6;2;NotNull;4;0
  8. Dans les champs Row Separator et Field Separator, saisissez respectivement le séparateur de lignes et le séparateur de champs.

Définir le flux de validation de consolidation

  1. Double-cliquez sur le tRuleSurvivorship pour ouvrir sa vue Component.

  2. Sélectionnez GRP_ID dans la liste Group Identifier et GRP_SIZE dans la liste Group size.

  3. Dans le champ Rule package name, remplacez le nom par défaut, org.talend.survivorship.sample par le nom de votre choix, si nécessaire.

    Le flux de validation de consolidation est généré et sauvegardé sous son nom, dans la vue Repository de la perspective Integration.

  4. Dans la table Rule table, cliquez sur le bouton [+] pour ajouter une ligne par règle.

    Dans cet exemple, définissez une règle et complétez-la comme suit :

    Ordre

    Nom de la règle

    Colonne de référence

    Fonction

    Valeur

    Colonne cible

    Sequential

    "Rule1"

    File

    Expression

    .equals("1")

    Acctname

    Une règle, "Rule1", est générée et exécutée par le composant tRuleSurvivorship. Cette règle valide les enregistrements dans la colonne File qui correspondent à l'expression saisie dans la colonne Value de la table Rule table. Le composant sélectionne la valeur correspondante comme étant la meilleure de la colonne cible Acctname.

  5. A côté du champ Generate rules and survivorship flow, cliquez sur l'icône pour générer l'ensemble de règles selon les conditions définies.

    L'ensemble de règles est généré et sauvé sous les nœuds Metadata > Rules Management > Survivorship Rules dans la vue Repository de la perspective Integration.

  6. Dans la vue Repository, parcourez votre système jusqu'au dossier Survivorship Rules et double-cliquez sur "Rule1" pour l'ouvrir.

    Cette règle sélectionne les valeurs provenant du fichier 1. Cependant, vous pouvez également consolider des enregistrements selon des critères spécifiques, par exemple, si Acctname a une valeur dans le premier fichier, vous pouvez utiliser cette valeur ou utiliser celle du second fichier. Pour ce faire, vous devez modifier le code manuellement dans le fichier de règle.

  7. Modifiez la règle avec le code Drools suivant :

    package org.talend.survivorship.sample 
    
    rule "ExistInFile1"
        no-loop true
        dialect "mvel"
        ruleflow-group "Rule1Group"
    when
        $input : RecordIn( file.equals("1"), acctname!= null, !acctname.trim().equals("") )  
    then
        System.out.println("ExistInFile1 fired\t" + $input.record_id);
        dataset.survive( $input.TALEND_INTERNAL_ID, "Acctname" );
        dataset.survive( $input.TALEND_INTERNAL_ID, "File" );
    end
    
    rule "NotExistFile1"
        no-loop true
        dialect "mvel"
        ruleflow-group "Rule1Group"
    when
        $input : RecordIn( file.equals("2"), acctname!= null && !acctname.trim().equals("") )  
        (not (exists (RecordIn( file.equals("1") ))) 
        or exists( RecordIn( file.equals("1"), acctname== null || acctname.trim().equals("") ) ))
    then
        System.out.println("NotExistFile1 fired\t" + $input.record_id);
        dataset.survive( $input.TALEND_INTERNAL_ID, "Acctname" );
        dataset.survive( $input.TALEND_INTERNAL_ID, "File" );
    end

    Avertissement

    Après avoir modifié le fichier de règle, vous ne devez pas cliquer sur l'icône . Sinon, vos modifications seront remplacées par la nouvelle génération de l'ensemble de règles.

Exécuter le Job

  1. Double-cliquez sur le tLogRow pour ouvrir la vue Component et, dans la zone Mode, sélectionnez l'option Table (print values in cells of a table).

    Les résultats d'exécution du Job sont affichés dans la table.

  2. Appuyez sur F6 pour exécuter le Job.

    La vue Run s'ouvre automatiquement et affiche les résultats d'exécution.

    Vous pouvez constater que quatre lignes constituent les enregistrements consolidés car leur colonne SURVIVOR indique true. Dans les enregistrements consolidés, la valeur Acctname est sélectionnée dans le fichier 1, si la valeur existe. Sinon, la valeur est sélectionnée dans le fichier 2 comme défini dans la règle. D'autres lignes sont des doublons des mêmes groupes.

    La colonne CONFLICT montre qu'aucune colonne n'a plus d'une valeur correspondant aux règles de validation données.