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, 10h12   #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 MAJ d'une table à partir d'un fichier

Bonjour à tous,

Jusqu'à maintenant j'utilise des tOracleInput pour récupérer des lignes d'une table T1 et les insérer dans une table T2 grace à un tOracleOutput

Cette fois-ci les lignes que je dois récupérer proviennent d'un fhicer.txt qui a cette forme

Col1|Col2|Col1|Col2
Col1|Col2|Col1|Col2
Col1|Col2|Col1|Col2
Col1|Col2|Col1|Col2
Col1|Col2|Col1|Col2

Parfois soit le Col1 n'existe pas soit le Col2, c'est à dire qu'il y a des lignes de ce genre :

Col1||Col1

Que dois-je mettre à la place d'un tOracleInput pour lire le fichier et récupérer les colonnes une par une ?

Une fois le job créé je dois l'exporter pour lancer le .sh sur un serveur unix, j'imagine que je dois inclure le fichier.txt source quelque part pour que le .sh se lance et arrive à lire le fichier sans que j'intervienne. Que me conseillez-vous ?

Merci
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 10h50   #2
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
Le composant que tu dois utiliser est tfileinputdelimited
Dans lequel tu dois indiquer le chemin vers le fichier en entrée

Pour qu'il retrouve le fichier tu as plusieurs choix
tu peux utiliser une variable de context qui indique le chemin du répertoire ou se trouve les fichiers en entrée
ou
simplement mettre "fichier.txt" et déposé le fichier au même endroit le sh

PS: "./repertoire/fichier.txt" ira chercher le fichier dans le repertoire situé au même endroit que le .sh
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 11h08   #3
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,

Cela a bien marché.

J'ai essayé de compliquer un peu le contexte puisque mon fichier source est un peu différent de ce que je pensais

La table destination contient cette fois-ci une colonne en plus à savoir un ID not nullable et clé primaire

Code :
1
2
3
4
5
6
REATE TABLE "JIRAQUAL"."W_DESTINAION"
  (
    "ID"   NUMBER NOT NULL ENABLE,
    "COL1" VARCHAR2(20 BYTE),
    "COL2" VARCHAR2(20 BYTE),
    CONSTRAINT "W_DESTINAION_PK" PRIMARY KEY ("ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "JIRAQUAL_DAT" ENABLE
Mon fichier source peut être de cette forme :

1|A|B|
C|D|
3|E|F|
G||
|H|

X||
|Z|

Pour la première et 3ème ligne je n'ai pas eu de soucie, je les ai bien trouvé dans ma table destination.
Pour les lignes 2, 4 et 7 j'ai eu ce message dans la console de Talend :
For input string: "C"
For input string: "G"
For input string: "X"
ORA-00001: unique constraint (JIRAQUAL.W_DESTINAION_PK) violated
Pour la ligne 5 il a inséré cette ligne : 0 H null
Pour la ligne 6 (vide) il n'a rien fait
Pour la ligne 7 et 8 il n'a rien fait non plus.

alors que dans mon exemple toutes les lignes doivent être insérées sauf la 6ème car elle est vide.

Merci bien de vos réponse
wissem.ba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 14h53   #4
Futur Membre du Club
 
Homme
Consultant informatique
Inscription : septembre 2009
Messages : 26
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : septembre 2009
Messages : 26
Points : 18
Points : 18
Salut,

pour les lignes 2,4 et 7, le tFileInput s'attendais à recevoir en première valeur un entier (tu as du définir la première colonne en int dans le schema). Puisqu'il trouve respectivement C,G et X, il n'arrive pas à faire la conversion -> erreur "For input String..."

Pour la ligne 5, il voit que ta première colonne est vide, tu as du définir comme valeur par défaut "0" et il insère donc cette valeur en base.

Pour la ligne 6, OK (note : dans le tFileInput tu as une option : ignorer les lignes vides).

Premier point, je te conseille de cocher l'option "terminer en cas d'erreur" du tFileInput. Tu auras alors le stackTrace complet de la première erreur et le job s'arrêtera. Ca permet de débugguer petit à petit.
Deuxième point, il faut au tFileInput un fichier avec un format bien précis. En l'occurence, ici, ça doit être dans le pire des cas :
1|A|B|
|C|D|
3|E|F|
|G||
|H|

|X||
|Z|
En effet, le composant ne peut pas "comprendre" de lui-même que lorsqu'il y a une ligne "C|D|", par exemple, cela veut dire que la première colonne est absente.

A plus tard
zaewonyx 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 23h09.


 
 
 
 
Partenaires

Hébergement Web