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 :

Remplir table de faits avec Talend


Sujet :

Développement de jobs

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Remplir table de faits avec Talend
    Bonjour,

    Je cherche à remplir ma base de données Mysql. J'ai le schéma dimensionnel suivant:
    Nom : Screenshot 2015-10-19 08.38.36.png
Affichages : 8574
Taille : 34,9 Ko

    J'ai donc toutes les clés étrangères des tables de dimension dans la table de fait du milieu.

    Maintenant j'ai un fichier CSV pour chaque thème qui contient toutes les infos pour peupler les tables.
    Disons que excel1.csv correspond au thème theme1 et excel2.csv correspond au thème theme2.
    Les thèmes, régions,département, mois sont déjà fixes donc j'ai déjà rempli les tables:
    par exemple la table Theme:
    idTheme | Theme
    1 | Theme1
    2 | Theme2

    la table Region:
    idRegion | Region
    1 | IDF
    2 | Nord
    3 | Bretagne

    la table département:
    idDepartement | idRegion | Departement
    1 | 1 | Essonne
    2 | 1 | Paris
    3 | 1 | Seine Et Marne
    4 | 2 | Pas de Calais
    5 | 2 | Picardie
    6 | 3 | Calvados
    7 | 3 | Finistère

    la table Annee:
    idAnnee | Annee
    1 | 2013
    2 | 2014
    3 | 2015

    la table Mois
    idMois | idAnnee | Mois
    1 | 3 | Janvier
    2 | 3 | Février
    3 | 3 | Mars
    4 | 3 | Avril
    5 | 3 | Mai
    6 | 3 | Juin



    Maintenant prenons le fichier CSV excel1.csv correspondant au theme1 :
    NOM/Region/Departement/Mois/Poids
    Adrien/IDF/Paris/Février/85
    Louis/IDF/Paris/Janvier/84
    Charles/Bretagne/Finistère/Janvier/90
    ...

    Je sais comment remplir ma table Client grâce à la transformation tMap dans Talend.
    J'obtiens:
    idClient/NOM/Poids
    1/Adrien/85
    2/Louis/84
    3/Charles/90

    Et je veux que ma table des faits contienne :
    idTheme/idDepartement/idClient/idMois
    1/2/1/2
    1/2/2/1
    1/7/3/1

    càd contenant les clés étrangères des autres tables.

    Voila: Je sais remplir les tables de dimension (la plupart sont remplies initialement sauf la table de client que je remplis grâce à tMap) mais j'aimerai pouvoir remplir correctement la table de faits.

    Par exemple prenons la première ligne du fichier csv :
    Adrien/IDF/Paris/Février/85

    Il faut aller chercher l'idClient correspondant a Adrien, aller chercher dans la table Département le département correspondant a IDF/PAris et renseigner 2, pareil pour le mois... ?
    Une idée ??

    Merci

  2. #2
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    voici ce que je propose:
    (tfileInputDelimitted pr chaq la lecture de chaq fichier csv)=>(1tmap pour lier toutes les table)=>tbdoutput(pour les sorties)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est ce que j'ai fait j'ai les fichiers dans tfileInputDelimited mais le problème c'est que je n'arrive pas à lier les tables pour créer la table de fait.

  4. #4
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    J'ai voulu te faire un exemple complet, mais j'ai vu toutes les subtilités de ton problème.

    Et j'ai mieux compris ta question

    [QUOTE]Voila: Je sais remplir les tables de dimension (la plupart sont remplies initialement sauf la table de client que je remplis grâce à tMap) mais j'aimerai pouvoir remplir correctement la table de faits.[QUOTE]
    Comment fais-tu pour distinguer tes différents thèmes et savoir dans quels fichier ce trouvent-il?


    Une autre question que je me suis posé
    NOM/Region/Departement/Mois/Poids
    Adrien/IDF/Paris/Février/85
    Louis/IDF/Paris/Janvier/84
    Charles/Bretagne/Finistère/Janvier/90
    C'est peux-tu avoir deux fois le même utilisateur dans ce fichier ?
    • Si Oui : il faut bidouiller car il faut insérer l'utilisateur uniquement dans le cas ou il n'a pas été créé
    • Si non : tu peux t'en sortir avec un tFilterRow, un tMysqlOutput, un tMysqlLastInsertId, un tJavaRow et un deuxieme tMysqlOutput après ton tMap


    De plus n'as tu pas oublié l'année dans ton fichier car comment mapper le mois sans l'année ?

    Peux-tu me faire un shootscreen de ce que tu as déjà fait STP ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Comment fais-tu pour distinguer tes différents thèmes et savoir dans quels fichier ce trouvent-il?
    Et bien je sais que le fichier 1 contient les données du sondage sur le theme 1 et que le fichier 2 sur le theme 2 donc quand j'importe les données du fichier 1 il faut que le champ idTheme de la table de fait vale 1 et quand j'importe les données du fichier 2 alors l'idTheme vaut 2.


    C'est peux-tu avoir deux fois le même utilisateur dans ce fichier ?

    Si Oui : il faut bidouiller car il faut insérer l'utilisateur uniquement dans le cas ou il n'a pas été créé
    Si non : tu peux t'en sortir avec un tFilterRow, un tMysqlOutput, un tMysqlLastInsertId, un tJavaRow et un deuxieme tMysqlOutput après ton tMap

    De plus n'as tu pas oublié l'année dans ton fichier car comment mapper le mois sans l'année ?
    Un utilisateur est unique par fichier, il ne peut pas y avoir 2 fois la même personne qui répond au même sondage.
    A quoi servent tMysqlLastInsertId, tJavaRow ?

    Non je n'ai pas l'année mais comme pour le thème il n'est pas indiqué mais on sait que tel fichier correspond au theme 1 et à l'année 2015.
    Mais si cela peut aider il suffit de rajouter une colonne avec le thème et une colonne avec l'année dans le fichier =)

    Et pour le moment j'ai un tMap qui remplit la table Client mais je ne sais pas comment dire au job que le département inscrit dans le fichier csv existe dans la table Departement et renseigner idDepartement dans la table des faits.

    Nom : Screenshot 2015-10-19 11.58.32.png
Affichages : 4241
Taille : 19,3 Ko

  6. #6
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Citation Envoyé par moneytime Voir le message
    Et pour le moment j'ai un tMap qui remplit la table Client mais je ne sais pas comment dire au job que le département inscrit dans le fichier csv existe dans la table Departement et renseigner idDepartement dans la table des faits.
    Quand je vois ton shootscreen et ta réponse à pekre, les deux ne sont pas en adéquation. Donc comme j'ai répondu après la mienne est aussi en adéquation.

    Pour moi, tu avais :
    • Un fichier mois qui remplissait la table Mois
    • Un fichier année qui remplissait la table Année
    • Un fichier thème qui remplissait la table Theme
    • Un fichier région qui remplissait la table Région
    • Un fichier département qui remplissait la table Département
    • N fichier excelX.csv qui remplissait les tables Client et Satistaction (C'est dr ?)


    Donc si tu était dans ce cas tu aurait du avoir des row lookup en entrée de ton tMap avec des tMysqlInput.


    La, j'ai l'impression que tu as un fichier qui charge toute la base !

    Si c'est bien ça tu crées toutes tes dimensions avec ton tMap et tu relies une secondes fois ton fichier (copié collé du tFileInputDelimeted + onSubjobOK) et cette fois tu fais des mapping avec ce que as en base. Et tous tes id seront crées

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Pour moi, tu avais :

    Un fichier mois qui remplissait la table Mois
    Un fichier année qui remplissait la table Année
    Un fichier thème qui remplissait la table Theme
    Un fichier région qui remplissait la table Région
    Un fichier département qui remplissait la table Département
    N fichier excelX.csv qui remplissait les tables Client et Satistaction (C'est dr ?)
    Ah non je n'avais pas été clair dans ce cas ! J'ai juste le fichier csv qui contient NOM/Region/Departement(dr)/Mois/Poids et je veux remplir la table client et la table de fait satisfaction.
    Le truc c'est que j'avais créé les tables mois, région, département etc à l'avance parce que si je le fais avec tMap, cela va me faire des doublons par exemple dans mon exemple :
    Adrien/IDF/Paris/Février/85
    Louis/IDF/Paris/Janvier/84
    Charles/Bretagne/Finistère/Janvier/90

    cela va donner la table Région
    1 | IDF
    2 | IDF
    3 | Bretagne

    et la table Mois
    1 | Février
    2 | Janvier
    3 | Janvier

    C'est pour ça que j'avais rempli les tables avec des valeurs uniques du coup !
    A moins qu'on puisse éviter les doublons ?


    Si c'est bien ça tu crées toutes tes dimensions avec ton tMap et tu relies une secondes fois ton fichier (copié collé du tFileInputDelimeted + onSubjobOK) et cette fois tu fais des mapping avec ce que as en base. Et tous tes id seront crées

    En gros il ne faut pas que je crée les tables Mois,Région, etc à l'avance ?
    je les crée dans le menu du tMap comme ici ?
    Nom : Screenshot 2015-10-19 13.01.26.png
Affichages : 3976
Taille : 13,1 Ko

  8. #8
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    En gros il ne faut pas que je crée les tables Mois,Région, etc à l'avance ?
    C'est un peux ça mon idée. Si tu n'arrives pas a tout charger d'un coup, fait le en plusieurs temps à l'aide de plusieurs tMap.
    1ere itération région, mois, utilisateur
    2eme itération département
    3e itération Fait




    cela va donner la table Région
    1 | IDF
    2 | IDF
    3 | Bretagne
    Utilise un tUniqRow en définissant la clé à ne pas dupliquer dans les paramètres simples et en cochant la case "Seulement une fois chaque clé dupliquée" dans les paramètres avancés.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est un peux ça mon idée. Si tu n'arrives pas a tout charger d'un coup, fait le en plusieurs temps à l'aide de plusieurs tMap.
    1ere itération région, mois, utilisateur
    2eme itération département
    3e itération Fait
    Ok merci je vais essayer ça ! Comment fait-on des "itérations" avec talend?


    Utilise un tUniqRow en définissant la clé à ne pas dupliquer dans les paramètres simples et en cochant la case "Seulement une fois chaque clé dupliquée" dans les paramètres avancés.
    Merci !

  10. #10
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Ok merci je vais essayer ça ! Comment fait-on des "itérations" avec talend?
    C'est une façon de parler.
    C'est des itérations dans le développement des étapes si tu préfères.


    Pour faire des vraies itérations au sens dévelopment (pour chaque, tant que...) tu as le tLoop le tForeach ...

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bon j'en ai bavé mais voilà où j'en suis :
    J'ai remplis la table client, mois, région et simplifié les tables mois et région (8 mois car cela s'arrete à aout et 8 régions c'est ok):
    Nom : Screenshot 2015-10-20 18.18.13.png
Affichages : 4165
Taille : 42,0 Ko

    Ensuite je relis les dr(départements) aux régions : Il y a bien 25 départements répartis selon les régions c'est parfait.
    Nom : Screenshot 2015-10-20 18.18.20.png
Affichages : 4076
Taille : 30,9 Ko
    Nom : Screenshot 2015-10-20 18.18.49.png
Affichages : 3880
Taille : 11,8 Ko

    Mais maintenant je n'arrive pas à remplir la table des faits avec les clés correspondantes (idClient,idMois,idDepartement)
    Je mappe les clés de toutes les tables dans la table finale mais cela ne fonctionne pas
    Nom : Screenshot 2015-10-20 18.30.37.png
Affichages : 5576
Taille : 33,4 Ko

    Une idée ??

  12. #12
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Nom : Screenshot 2015-10-20 18.30.37.png
Affichages : 5576
Taille : 33,4 Ko


    Tu devrais avoir aussi un tFileInputDelimeted sur cette image qui devrait être l'entrée main du tMap.
    Comme toutes tes données existe en base, ton mapping sera complet et tu pourras insérer tes données

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Octobre 2015
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci j'ai réussi ! Il faut bien spécifier les clés étrangères (en violet) dans les entrées du tmap et mettre le fichier de données en main et les bdd en lookup !
    J'expliquerai la solution en éditant ce poste !

  14. #14
    Membre expérimenté Avatar de supergeoffrey
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2010
    Messages
    802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 802
    Points : 1 698
    Points
    1 698
    Par défaut
    Pense à marquer le post en résolu ensuite.
    As-tu compris la solutions de exercice au fait ? et la méthode utilisée ? Tu seras le refaire sur un autre exercice ?

Discussions similaires

  1. Alimenter table de fait avec kettle
    Par amiraprincesse dans le forum kettle/PDI
    Réponses: 17
    Dernier message: 06/07/2010, 15h56
  2. Table de fait avec Talend
    Par leithyfa dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 23/07/2009, 23h02
  3. Remplir table des fait
    Par amiraprincesse dans le forum Alimentation
    Réponses: 4
    Dernier message: 16/05/2009, 23h13
  4. alimenter table de fait avec kettle
    Par amiraprincesse dans le forum kettle/PDI
    Réponses: 7
    Dernier message: 28/04/2009, 09h27
  5. alimenter table de fait avec kettle
    Par amiraprincesse dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 14/04/2009, 00h22

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