IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Netsoro

Talend : Vérification de la validité de dates dans un flux de données

Noter ce billet
par , 27/08/2018 à 11h29 (1758 Affichages)
Voici un petit job Talend permettant de récupérer les lignes d'un flux de données dont les dates sont valides.

Supposons qu'on a un fichier contenant des données avec des dates saisies dans des formats différents, et que nous voulons récupérer toutes les lignes dont les dates sont dans un des formats suivants:

  • yyyy-MM-dd HH:mm:ss
  • yy-MM-dd HH:mm:ss
  • dd/MM/yyyy


Exemple de données sources:

1;2010-02-09 00:00:00
2;2010-02-09 00:00:00
3;2010-13-09 00:00:00
4;10-02-09 00:00:00
5;2010-13-09
6;10-02-09 00:00:120
7;11/07/2018

Ainsi, on utilise un composant de lecture des donnes, si les données se trouvent

  • Dans un fichier Excel => tFileInputExcel
  • Dans un fichier plat => tFileInputDelimited
  • Dans une base de données selon la BD => tOracleInput, tMySqlInput, etc..


Job permettant de faire ce traitement :

Nom : date_job_1.png
Affichages : 407
Taille : 38,4 Ko

Configuration du composant de transformation tMap:

Nom : date_config_2.png
Affichages : 455
Taille : 86,9 Ko

Expression de date valide :
Au niveau de la table cible valide_date, un click sur la petite flèche blanche permet d'afficher la zone de texte où on peut saisir notre expression de filtre permettant de définir ce qu'on considère comme étant une date valide.
C'est dans cette zone où on dira, si ma date est dans ce format là ou dans cet autre format etc.. c'est qu'elle est valide.
L'Opération nous permettant de faire cette vérification est une routine qui s'appelle isDate(String,String), elle est encapsulée dans la classe statique TalendDate.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
TalendDate.isDate(row1.date,"yyyy-MM-dd HH:mm:ss") || 
TalendDate.isDate(row1.date,"yy-MM-dd HH:mm:ss") || 
TalendDate.isDate(row1.date,"dd/MM/yyyy")

On pourra assez facilement récupérer toutes les lignes contenant des dates non valides, en ajoutant une table cible de capture des rejets et en mettant simplement à true la propriété Catch output reject :

Nom : date_reject3.png
Affichages : 368
Taille : 22,9 Ko

Résultats :

Nom : date_res_3.png
Affichages : 381
Taille : 12,4 Ko

On constate que les lignes 1,2,4,7 du tLogRow_1 sont les dates qui sont valides selon les expressions définis et qu'on récupère les lignes rejetées dans le tLogRow_2.

Export éléments sources :

test_valide_date.zip

Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Viadeo Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Twitter Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Google Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Facebook Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Digg Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Delicious Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog MySpace Envoyer le billet « Talend : Vérification de la validité de dates dans un flux de données » dans le blog Yahoo

Commentaires

  1. Avatar de MythOnirie
    • |
    • permalink
    Bonjour,

    Ne serait-il pas plus pertinent de créer dans une routine une fonction prenant en entrée la date et renvoyant un booléen indiquant si la date corresponds aux formats de dates paramétrés dans la routine ?
  2. Avatar de Netsoro
    • |
    • permalink
    Citation Envoyé par MythOnirie
    Bonjour,

    Ne serait-il pas plus pertinent de créer dans une routine une fonction prenant en entrée la date et renvoyant un booléen indiquant si la date corresponds aux formats de dates paramétrés dans la routine ?
    Bonjour MythOnirie,

    Effectivement ça peut tout à fait être pertinent de factoriser les expressions de dates valides dans une routine comme indiqué dans ton commentaire, cette routine pourra être réutilisée dans d'autres parties du projet, ou dans d'autres jobs.
    Mais je n'ai pas voulu parlé de création de routine dans ce mini-billet, et utiliser simplement les expressions de filtre sur la routine isDate(String,String).