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 :

Récupérer le contenu de plusieurs tables (Mysql) et le stocker sous forme de fichier plat.


Sujet :

Développement de jobs

  1. #1
    Membre à l'essai
    Femme Profil pro
    Data Analyst
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Récupérer le contenu de plusieurs tables (Mysql) et le stocker sous forme de fichier plat.
    Bonjour à tous,

    je débute avec Talend (TOS) et je vous remercie d'avance pour votre aide.

    J’ai une base de données « DataBase » sur mon server MySql. Elle comporte 70 tables au total.
    Avec Talend, je cherche à récupérer le contenu de chaque table via une requête (sélect * from tableN) et ensuite de stocker ce contenu dans un fichier(.csv) qui porte le nom de la table en question.
    Et recommencer l’opération pour toutes les tables de manière automatique.

    j’ai récupéré via le composant tMysqlTableList le nom des tables de ma base que j’ai stocké dans un fichier (.csv) une table de deux colonnes (id et table_name) qui va me servir pour ma fonction java,(tJava).

    Dans l’idée, je pensais partir sur un boucle for.
    for (int = i; i <= +id ; i++) {
    query (« select * from » +table_name + « where id = » +i );
    }
    Je ne vois pas vraiment comment procéder pour écrire cette fonction pour ensuite la stocker dans un fichier(.csv)

    Merci de votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2010
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 343
    Points : 653
    Points
    653
    Par défaut
    Bonjour,


    Avec la version TOS, il ne te sera pas possible de faire un job générique. Tu vas devoir créer 70 traitements TMysqlInput -> tFileOuputDelimited.
    Tu créés une métadonnée, et tu récupères le schéma de tes tables. Cela ira plus vite pour le développement.

    Pour répondre a la question, si tu veux boucler sur la liste des tables, tu utilises le composant tMysqlTableList suivit du composant tFlowToIterate.
    Ce composant transforme un flux main en lien iteration. Tu as donc ta boucle directement sans passer par du code Java.

    Pour aller plus loin, si tu avais la version entreprise, tu aurais après le lien iterate un TMysqlInput -> tFileOuputDelimited.
    Dans le tMysqlInput il y aurait ta requete paramétrée "select * from " + (string)globalMap.get("nomTable")
    Le schema a utiliser serait une seul colonne de type Dynamique. Tu aurais donc 1 job avec 4 composants pour exporter toutes tes tables.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Data Analyst
    Inscrit en
    Avril 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2014
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Bonjour emenuet,

    Merci de ta réponse très rapide. Merci.
    Bon ça confirme un peu ce que je pensais.
    Oui je me suis rendu compte que la version entreprise pouvait faire le fameux traitement que je cherche à faire et avec une simplicité déroutante.

    Pour répondre a la question, si tu veux boucler sur la liste des tables, tu utilises le composant tMysqlTableList suivit du composant tFlowToIterate.
    Ce composant transforme un flux main en lien itération. Tu as donc ta boucle directement sans passer par du code Java.
    On ne peut pas utiliser le composant tMysqlTableList suivit de tFlowToIterate directement. Car comme tu le décris dans ton explication, tFlowToIterate va "transformer un flux main en itération" et le composant tMysqlTableList envoie en sortie un lien d'itération, si je ne me trompe pas.

    Dans mon job, j'ai utilisé tIterateToFlow, il m'a permis d'utiliser les données récupérées du composant tMysqlTableList.
    "tMysqlConnection -> tMysqlTableList -> tIterateToFlow -> tMap (j'ajoute une colonne id auto-généré) -> tFileInputDelimited"

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/11/2006, 10h59
  2. Réponses: 5
    Dernier message: 20/06/2006, 00h22
  3. [MySQL] Récupérer des variables via plusieurs tables (32 au total ^^)
    Par streeter dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 20/05/2006, 18h14
  4. Zone de liste avec contenu de plusieurs tables
    Par webmister dans le forum Access
    Réponses: 1
    Dernier message: 27/04/2006, 20h07
  5. Comment récupérer le contenu de plusieurs fichiers textes ?
    Par calimero2611 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 16h45

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