Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 13h46   #1
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Par défaut Auto-incrémentation d'un ID

Bonjour à tous,

Je voudrais insérer des lignes prises d'un fichier et les insérer dans une table.

Le fichier est comme suit :

10|Name1|Desc1
20|Name2|Desc2
30|Name3|Desc3
40|Name4|Desc4

La table est comme suit
Tab
Id not null, clé primaire
ProjID int
Name varchar
Desc varchar

L'id n'existe pas dans le fichier, je dois faire un truc incrémentale qui prend le max (Id) dans T et ajoute 1.

Je vous invite à voir la 1ere photo.

Dans le tOracleInput j'ai mis cette requête :

Code :
SELECT max(id) FROM Tab
Puis j'ai fait le mapping qui se trouve dans la 2eme photo jointe.

L'insertion des 4 lignes se fait mais au lieux d'avoir 4 id incrémentés j'ai des 0.

Ce que je voudrais c'est que si la requête

Code :
SELECT max(id) FROM Tab
retourne 912, je voudrais avoir 4 lignes avec des id : 913, 914, 915, 916

J'ai essayé avec Numeric.sequence("s1",1,1) mais je ne sais pas comment l'utiliser et je ne sais pas si elle peut répondre à ma question.

Merci pour votre aide
Images attachées
Type de fichier : gif Job.GIF (13,6 Ko, 12 affichages)
Type de fichier : gif tMap.GIF (86,0 Ko, 16 affichages)
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 13h56   #2
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 812
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 812
Points : 1 084
Points : 1 084
Il n'y a pas moyen de gérer ça au niveau de la base de données avec une séquence ?
__________________
Pensez à la fonction Recherche
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h00   #3
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Justement je n'ai pas le droit de le faire.

En fait il y a une application web qui utilise cette table et dont le code tient en compte l'auto incrémentation

Pour cette fois je dois le faire d'une manière exceptionnelle mais normalement on ajoute des lignes à partir de l'application
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h12   #4
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 812
Détails du profil
Informations personnelles :
Nom : Benoit Durand
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Consultant en Business Intelligence Freelance

Informations forums :
Inscription : mars 2005
Messages : 812
Points : 1 084
Points : 1 084
Bon ok.
Ce que je ferais (fonctionne si l'application n'insère pas de données en même temps)

Chargement du max(id) dans une variable globale.
Chargement du fichier en utilisant la variable globale dans le tMap et incrémentation de cette variable dans une 2eme sortie par exemple.
__________________
Pensez à la fonction Recherche
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h25   #5
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Tu peux m'expliquer la 2ème partie stp ?
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 18h09   #6
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Voici la méthode en image.



Ajouter une variable de contexte dans le job avec le nom MAX_ID

Tu ajoutes cette requête dans le tOracleInput :

Code :
1
2
3
4
SELECT 
'MAX_ID' AS KEY,
  nvl(max(chmp_ID), 1) AS VALUE
FROM maTable
tu relies au tContextLoad en récupérant son schéma dans le tOracleInput pour modifier la valeur du MAX_ID (qui est égale au début du job à 0)

Dans le tMap tu fais (pour ton champ à incrémenter) :

Code :
Numeric.sequence("s1",context.MAX_ID,1)
Le mieux serait qu'en même d'utiliser une séquence Oracle pour ce genre de traitement et de l'utiliser dans l'onglet "Advanded Settings" du composant tOracleOutput. Mais bon... je dis ça, je dis rien
Images attachées
Type de fichier : jpg imgJob.JPG (45,7 Ko, 101 affichages)
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 13h23   #7
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Merci bien pour ta réponse.

J'ai placé un tContextLoad_1 dans le job, comment je peux y ajouter la variable contexte MAX_ID ?

J'ai aussi créé une variable MAX_ID dans Contextes (menu à gauche) ai-je bien fait ?

Merci
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 14h54   #8
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Qui sait utiliser tContextLoad_1 ?
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 14h55   #9
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Fais exactement comme j'ai indiqué dans mon précédent message

Tu peux ajouter un contexte uniquement dans ton job et pas dans un groupe de contexte (onglet contexte de ton job)
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 14h57   #10
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Merci,

D'accord j'ai supprimé la variable du groupe contexte.

J'ai ajouté un tContextLoad_1 dans mon job mais je ne sais pas ajouté la variable MAX_ID.

Quand j'ai cliqué sur Éditer le Schéma un tableau s'ouvre et dans lequel il y a les 2 lignes key et value
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 15h31   #11
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
transfert les deux colonnes à droites pour avoir le même schéma dans ton composant de lecture Oracle et de chargement des contextes
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 15h41   #12
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Je suis désolé je ne vois pas où je dois mettre la variable MAX_ID

J'ai fait une capture d'écran.

Merci
Images attachées
Type de fichier : png fichier.PNG (45,1 Ko, 13 affichages)
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 16h07   #13
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Le tContextLoad va charger automatiquement la valeur provenant du tOracleInput.

Il faut ensuite que tu utilises ta variables context.MAX_ID dans ton tMap pour générer automatiquement la séquence.

En PJ l'exemple du job. Ca vaut mieux que de grandes explications. A importer dans ton Talend "clique droit sur Job puis Importer des éléments"
Fichiers attachés
Type de fichier : zip Exemple.zip (29,0 Ko, 16 affichages)
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 16h23   #14
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Voilà ce que j'ai
Images attachées
Type de fichier : png error.PNG (53,9 Ko, 11 affichages)
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 16h29   #15
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Le tMap ne reconnait pas la variable context.MAX_ID

J'ai fait un nettoyage et voilà ce que j'ai :
Images attachées
Type de fichier : png error.PNG (23,1 Ko, 8 affichages)
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h32   #16
Rédacteur/Modérateur
 
Avatar de jsd03
 
Jean-Sébastien DARGES
Consultant décisionnel
Inscription : août 2008
Messages : 983
Détails du profil
Informations personnelles :
Nom : Jean-Sébastien DARGES
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant décisionnel

Informations forums :
Inscription : août 2008
Messages : 983
Points : 1 845
Points : 1 845
Ajoute une variable de contexte nommée MAX_ID de type Integer dans ton job dans l'onglet "contexte" de ton job...
__________________
Google est ton ami mais ton voisin aussi

Modérateur BI
Mes tutoriels - FAQ Talend - FAQ SQL*Plus

Suivez @Developpez sur twitter !
jsd03 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h41   #17
Membre à l'essai
 
Inscription : janvier 2009
Messages : 159
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 159
Points : 21
Points : 21
Tu parles de group context ? si c'est le cas j'ai un message d'erreur qui dit que MAX_ID existe déjà
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 15h55   #18
Invité de passage
 
Homme john
Consultant informatique
Inscription : janvier 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme john
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2012
Messages : 1
Points : 1
Points : 1
Bonjour,
pour répondre au premier sujet (s'il est encore d'actualité),
il y un autre moyen d'incrémenter l'id, c'est d'utiliser le composant
tOracleSCD en renseignant:
-clé source : le champ que tu souhaites avoir unique
-clé de substitution : id, et création = Table max+1
-les autres champs à glisser dans 'champs de type 1'
betonejohn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h56.


 
 
 
 
Partenaires

Hébergement Web