IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Comment ne garder que la dernière ligne recue sur chaque valeur d'une clé ?


Sujet :

Développement de jobs

  1. #1
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut Comment ne garder que la dernière ligne recue sur chaque valeur d'une clé ?
    Bonjour,

    Voici ma problématique : je reçois des enregistrements via un flux, et afin d'éviter de traiter des lignes inutilement, je souhaite ne garder que la dernière ligne reçue pour chaque clé de l'enregistrement.

    Je me demandais quelle était la mise en oeuvre la plus efficace ?

    Des idées ?

    Merci,
    Nicolas

  2. #2
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    J'ai dû le faire pour certains job, j'ai traité ça dans le sql en entrée :
    un row_number() dans mon tMSSQLInput.

    Je suis également interessé par les autres solutions proposés...
    Pensez à la fonction Recherche

  3. #3
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    J'utilise des fichiers en source, donc pas de filtre possible en entrée.

    Pour l'instant, je suis parti sur l'utilisation d'un tAggregateRow, en sortant les champs qui ne font pas partie de la clé avec la fonction 'dernier'.

    Mais d'un point de vue perfs, j'ai peur que ça ne soit pas terrible...


    Avec Datastage, il suffisait d'envoyer les données dans un hashfile. Au final on avait un fichier avec uniquement les dernières lignes pour chaque clé. Simple, rapide, efficace.
    J'ai entendu parler des hashfils sous Talend, mais il parait que leur utilisation n'est pas recommandée...

    Nicolas

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 93
    Points : 110
    Points
    110
    Par défaut
    Simple,

    tUniqRow qui conserve la dernière valeur.
    Si tu as des volumes élevés, n'oublis dans l'onglet advance de sélectionner l'option store on disk.

    Ca sera plus rapide qu'un bon vieux hashFile ;-)

    boubsy

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    L'équivalent du "HashFile" pour un job Talend pourrait être une HashMap (dans un tJavaFlex).

    Le fonctionnement de la HashMap écrase les données doublon avec les dernières clés lues. Du point de vue des performances, c'est dans ce cas précis sans doute plus rapide qu'un tUniqRow.

    Attention toutefois : cette solution suppose une volumétrie faible, la totalité du fichier étant stockée en mémoire lors de l'opération.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Merci pour vos idées.

    Je vais tester ces 2 mises en œuvre.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par boubsy Voir le message
    Simple,

    tUniqRow qui conserve la dernière valeur.
    Alors à priori le tUniqRow ne convient pas : il a l'air de garder la première valeur, et non la dernière.

  8. #8
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    L'équivalent du "HashFile" pour un job Talend pourrait être une HashMap (dans un tJavaFlex).

    Le fonctionnement de la HashMap écrase les données doublon avec les dernières clés lues. Du point de vue des performances, c'est dans ce cas précis sans doute plus rapide qu'un tUniqRow.

    Attention toutefois : cette solution suppose une volumétrie faible, la totalité du fichier étant stockée en mémoire lors de l'opération.
    Il serait possible de voir un exemple basic de code avec un HashMap SVP ?
    C'est ce qui est utilisé par Talend dans les tMap pour gérer les jointures ?

    merci
    Pensez à la fonction Recherche

  9. #9
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Pour le tMap, je n'ai aucune idée de son fonctionnement interne.

    -----

    Supposons que :
    - le lien d'entrée soit nommé "row1"
    - le champ dont on veut garder la dernière valeur uniquement soit "id"

    Code du tJavaFlex (begin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map maMap = new LinkedHashMap();
    Code du tJavaFlex (main) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maMap.put(row1.id, row1);
    Code du tJavaFlex (end) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    globalMap.put("maMap", maMap);
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  10. #10
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Pour info, je suis resté sur l'utilisation du tAggregateRow.
    Ça a l'air de marcher pas mal même du point de vue perfs. (Mais je reste sur de petites volumétries (quelques dizaines de milliers de lignes).

    Nicolas

Discussions similaires

  1. [MySQL] Boucle qui ne lit que la dernière ligne
    Par YaNnTeB dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 21/08/2009, 10h56
  2. Garder les 10 dernières lignes d'un Trichedit
    Par Coussati dans le forum Débuter
    Réponses: 8
    Dernier message: 04/03/2009, 23h12
  3. Textarea et blob : je n'ai que la dernière ligne
    Par rems033 dans le forum Langage
    Réponses: 2
    Dernier message: 18/03/2008, 20h09
  4. Réponses: 6
    Dernier message: 03/12/2007, 14h13
  5. [Etat] Comment n'imprimer que la dernière page ?
    Par TLImpala dans le forum IHM
    Réponses: 3
    Dernier message: 09/05/2007, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo