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 :

lancer un job uniquement si une table mysql contient des donnees


Sujet :

Développement de jobs

  1. #1
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut lancer un job uniquement si une table mysql contient des donnees
    Bonjour.

    Je cherche a ne lancer un job Talend que si une table MySQL n'est pas vide. Si cette table Mysql est vide, on ne lance rien.

    J'ai essaye avec un tJava. Problemes :

    - je ne maitrise pas java et ce que j'ai ecrit est rejete par Talend
    - je suis, sauf erreur de ma part, oblige de definir un fichier bat a executer et le repertoire ou il se trouve. Je cherche plutot a pouvoir lancer le 2eme job en etant directement dans Talend sans l'exporter, dezipper les fichiers, et les copier a un autre endroit designe dans le tJava.

    Un tRunJob ne semble pas convenir, je n'ai pas trouve le moyen d'y inclure une condition (si table Mysql non vide, lance le job intel, sinon ne lance rien).

    Est-il possible de faire ce genre de choses dans Talend ?

    Merci,
    Cdlt

  2. #2
    Membre actif Avatar de kayim
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2011
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2011
    Messages : 134
    Points : 283
    Points
    283
    Par défaut
    Hello tu peux faire un :

    tMysqlInput--------main---tSetGlobalVar
    |
    IF
    |
    tRunJob

    Dans ton tMysqlInput, tu calcul le nombre de lignes "Select count(*) from ma_table" et le résultat est injecté dans le tSetGlobalVar
    Dans ton trigger IF, tu testes, si la valeur est >0 au quel cas le job du tRunJob est exécuté
    Etre un homme c'est regarder le diable droit dans les yeux et lui dire d'aller se faire foutre...

  3. #3
    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,

    Tu peux utiliser les composants suivant :

    tWaitForSqlData -- iterate --> tRunjob


    tu paramètres le tWaitForSqlData "greater than" "0" et "exit loop", dans la partie avancé du composant tu peux même faire ta propre requête.

  4. #4
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    Bonjour.

    Merci pour ces reponses.

    J'ai d'abord essaye :

    tWaitForSqlData -- iterate --> tRunjob

    Probleme : il est obligatoire de definir une "Connection list". L'option "Use an existing connection" est selectionnee et grisee. Je ne peux pas la deselectionner. De plus, le champ a cote de "Connection list" est vide.

    Lorsque je lance le job, Talend m'affiche une fenetre d'erreur et m'indique pour tWaitForSqlData : "Parameter (Connection list) is empty but is required".


    J'ai ensuite essaye :

    tMysqlInput--------main---tSetGlobalVar
    |
    IF
    |
    tRunJob

    Dans le tMysqlInput j'ai relie a ma base Mysql et j'ai, comme requete sql : "SELECT COUNT(*) FROM ma_table WHERE Nr_soc=960"
    Dans le tSetGlobalVar, je n'ai pas vu quoi mettre, j'ai donc dans les champs Key et Value la meme valeur : "COUNT(*)". J'ai mis cette valeur car, lorsque je lance la requete sql dans Mysql, j'obtient, comme nom de champ : "COUNT(*)"
    Dans le IF j'ai essaye avec "COUNT(*)<>0" puis avec "<>0"
    Dans le tRunJob j'ai le nom du job a lancer.

    Lorsque je lance le job, Talend m'affiche une fenetre d'erreur m'indiquant :
    "General" : Type mismatch: cannot convert from String to boolean
    "tMysqlInput" : No schema has been defined yet

    Ces deux erreurs sont signalees quelque soit le contenu du IF.

    Cdlt.

  5. #5
    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
    Pour tes erreurs :

    pour le "Use an existing connection", il suffit de poser au début du job le composant tMysqlConnection qui permet d'ouvrir une connexion a la base et de la réutiliser. Le composant tWaitForSqlData récupère automatiquement l'information.

    Pour le tSetGlobalVar, le nom de la variable doit être une constante key = "nbligne" par exemple. Et dans valeur tu récupère le nom de la colonne du schema que tu as du déclarer de type intéger value = row1.count par exemple. Les valeurs dépendent de tes paramètres.
    Dans la condition du va avoir quelques chose comme cela :
    (Integer)globalMap.get("nbligne") != 0


    Je te conseil d'avoir le guide des composants a porté de main, il donne les informatisions de paramétrage, ainsi que des exemples d'utilisation des composants

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 44
    Points
    44
    Par défaut
    Bonjour,
    dans la solution proposée par emenuet, ajoute un composant tMysqlConnection.
    Tu aura quelque chose de ce genre :
    Nom : help.PNG
Affichages : 643
Taille : 10,8 Ko
    dans le composant tMysqlConnection, tu renseigne les paramètres de connexion à ta base de données.
    dans le tWaitForSqlData, tu sélectionne cet élément de connexion dans le champ "Connection list".
    Essaye à nouveau, ça devrait marcher !

  7. #7
    Membre actif
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Points : 238
    Points
    238
    Par défaut
    En rajoutant le tMysqlConnection, ca a fonctionne sans que je n'ai a rajouter la valeur dans Connection List du tWaitForSqlData. Talend a mis lui meme a jour.

    Ca fonctionne.

    J'ai essaye de modifier le job contenant le tSetGlobalVar sans succes, il y a surement quelque chose que je ne fais pas correctement. L'aide Talend ne montre que le lancement d'un tJava suite a un tSetGlobalVar. Je chercherai sur internet de plus amples infos concernant ce tSetGlobalVar. Talend me signale actuellement un probleme entre le tMysqlInput et le tSetglobalVar.

    Merci pour votre aide, j'ai resolu mon probleme en utilisant l'une des solutions.

    Merci.
    Cdlt.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Septembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Septembre 2008
    Messages : 48
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par kayim Voir le message
    Hello tu peux faire un :

    tMysqlInput--------main---tSetGlobalVar
    |
    IF
    |
    tRunJob

    Dans ton tMysqlInput, tu calcul le nombre de lignes "Select count(*) from ma_table" et le résultat est injecté dans le tSetGlobalVar
    Dans ton trigger IF, tu testes, si la valeur est >0 au quel cas le job du tRunJob est exécuté
    Je ne suis pas pro mais avec le "If" c'est la solution en effet. On peut même simplifier en enlevant le tSetGlobalVar et en utilisant directement la variable globalMap sur la condition du "If" :

    ((Integer)globalMap.get("tPostgresqlInput_1_NB_LINE")) != 0

    Si le résultat renvoyé est différent de 0 ligne => on exécute

    En espérant que ça aidera certains!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Premiere fois : Creer une table et importer des donnees Excel
    Par patrickthierry dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/08/2009, 19h24
  2. Réponses: 5
    Dernier message: 15/04/2009, 15h38
  3. id unique dans une table mysql
    Par unepetitequestion dans le forum Débuter
    Réponses: 2
    Dernier message: 01/12/2008, 16h28
  4. Réponses: 6
    Dernier message: 29/07/2008, 16h44

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