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 22/05/2008, 20h18   #1
Invité de passage
 
Inscription : mai 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 4
Points : 0
Points : 0
Par défaut structure complexe - gestion fct contexte

Bonjour,

Je suis débutante sur Talend et viens de passer une journée à essayer d'implémenter le processus suivant (c'est un cas d'école pour valider un besoin) et j'avoue que je dois pas être douée (je suis pas super technique).

Je vous décris tout mais je suis preneuse si vous m'expliquer même une toute petite partie...
  • un fichier est reçu avec la structure suivante :
  • 1 enregistrement DEB composé de : "DEBUT" + un champ A2 (ID client)
  • n enregistrements CORPS composé de : "CORPS" + un champ N3 (ID produit)
  • chaque enregistrement peut être soit en :
  • format fixe sans délimiteur
  • format variable avec délimiteur PIPE
  • format variable avec délimiteur DOLLAR
  • les enregistrements sont terminés par un retour chariot

Le processus à implémenter doit:
  • prévoir 2 entrées différentes : une pour le format fixe sans délimiteur et une pour le format variable avec délimiteur, ce dernier étant déterminé par un contexte (lors d'une présentation, le technique de Talend m'avait dit que c'était possible mais je ne sais plus comment : on peut imaginer que les fichiers arrivent avec un nom préfixé par un n° de client ou en première ligne le n° de client + une table référençant le délimiteur pour chaque client), en effet je veux éviter d'avoir à dupliquer autant de descriptions de fichiers que de délimiteurs différents.
  • dans le cas du format variable avec délimiteur, transformer ce fichier en format fixe sans délimiteur (identique à la 1ère entrée), on se retrouve donc avec un fichier de format identique pour la suite du processus
  • contrôler la structure du fichier (présence d'un DEB et d'au moins un CORPS, valeurs A2 ou N3)
  • permettre de contrôler les valeurs du champ ID produit mais selon le champ ID client (ex : client C1 valeurs 100 et 200, client C2 valeurs 300 ou 400) et dispatcher ainsi le fichier entrant en 2 fichiers de lignes OK et KO
  • dispatcher ensuite le fichier OK en n fichiers correspondant aux valeurs de ID produit (un fichier pour les valeurs 100, un autre pour les valeurs 200, etc.)

J'ai réussi à faire des processus simples sur Talend mais j'ai bien sûr plein de questions :
  • comment fait on un fichier de structure complexe (positionnel ou délimité)
  • comment paramétrer le délimiteur en fonction d'une table?
  • comment vérifier la structure?
  • comment vérifier les valeurs 2 types d'enregistrements?
  • comment parcourir le fichier pour dispatcher le fichier entrant en n fichiers?

(la transfo je pense savoir faire)

Merci mille fois si vous pouvez m'aider!
lilyparis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 12h21   #2
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 818
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 : 818
Points : 1 092
Points : 1 092
Bonjour,

>>comment fait on un fichier de structure complexe (positionnel ou délimité)

Tes fichiers n'ont pas l'air trop complexes, il s'agits de fichiers avec 2 colonnes de type string. Le plus propre est de créer les modèles dans les meta données meta data puis file delimited et file positional.

>>comment paramétrer le délimiteur en fonction d'une table?

Je n'ai pas très bien compris ce que tu souhaitais faire. Tu veux stocker le délimiteur dans une table de sgbd et selon le fichier utiliser tel délimiteur ? A ce moment là le plus simple est de rechercher ton délimiteur dans ta table est de le mettre dans une variable globale (ou de contexte) puis d'appeler cette variable dans le champ délimiteur de ton tFileInputDelimited ou
tFileOutputDelimited.

>>comment vérifier la structure?
Je ne sais pas trop : Charger les 2 colonnes et faire les tests avec des fonctions java dans un tMap par exemple row1.col1.equals("DEB")...

>>comment vérifier les valeurs 2 types d'enregistrements?
euh il doit manquer un ou deux mots XD, si c'est tester que ta colonne 2 est bien un numeric, tu charges la colonne au format string et tu tests la chaines avec matches() pour voir si elle ne contient que des chiffres ou pas.

>>comment parcourir le fichier pour dispatcher le fichier entrant en n fichiers?
Avec un tMap

Cordialement,
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 14h14   #3
Invité de passage
 
Inscription : mai 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 4
Points : 0
Points : 0
Merci pour la réponse.

Je précise qu'il s'agit d'un cas d'école ici, les cas que je gère sont évidemment beaucoup plus complexes.

1) Quand je parle de fichier à structure complexe, je veux dire :
- 1 occurence DEBUT
- n occurences CORPS

Les fichiers positionnels/délimités ne me permettent justement pas de gérer les n occurences de CORPS? Je suis obligée de passer par du XML où il y a une autre façon de faire (un type de fichier que je ne connais pas?).

Par ailleurs, j'aimerais pouvoir définir dans la structure les colonnes de chaque enregistrements (ex: A2 pour l'ID client et N3 pour l'ID produit) et pas juste définir la taille de l'enregistrement.

Pour ceux qui connaissent, l'objectif est aussi de pouvoir gérer des normes de type NOEMIE.

2) Pour la vérification de la structure, il s'agit de vérifier qu'on a bien une occurence DEBUT et au moins une occurence CORPS par exemple (je ne parle pas de la vérification de la sémantique) et que dans chaque enregistrement, les tailles, obligatoirités et types (string, numérique, date) soient respectés.

Est-ce que le fait de définir par exemple la structure d'un FileDelimited génère une erreur si dans le processus défini, le fichier qui rentre ne vérifie pas la structure (ex : une colonne devrait être N3 or elle est A3). Sinon quel composant utiliser pour générer l'erreur?

3) Vérifier les valeurs de 2 types d'enregistrements : je veux tester par exemple que si ID client (dans l'entité DEBUT) vaut 1, alors ID produit (dans l'entité CORPS) doit valoir 200 ou 300.

Merci pour vos retours
lilyparis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 14h43   #4
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 818
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 : 818
Points : 1 092
Points : 1 092
1) pas facile avec talend

2) si tu as de l'alphabétique à la place du numéric le ttFileInput va générer un warning , il n'arrivera pas à mettre la valeur dans la variable numérique. Ce warning doit pouvoir être catché par un tLogCatcher

3) dans un tMap tu peux faire un truc du genre dans le expression filter de l'output :
row1.id_client==1 && (row1.id_prod==200 || row1.id_prod==300)

alors dans ton output tu fais le traitement normal

tu crées un second output en activant le output reject et dedans tu fais ta sortie d'erreur.
Benoit_Durand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 15h05   #5
Invité de passage
 
Inscription : mai 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 4
Points : 0
Points : 0
1) pas facile, càd?
-> il faut que je passe par XML?
-> il faut que je définisse des fichiers plats et que je fasse une fonction (quel composant) pour lire le fichier et vérifier moi même les indentations?

3) faire row1.id_client==1 && (row1.id_prod==200 || row1.id_prod==300) : cela suppose que j'aie tout sur un même row donc il faut que je transforme mon fichier structuré?
lilyparis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2008, 16h52   #6
Membre Expert
 
Avatar de Benoit_Durand
 
Benoit Durand
Consultant en Business Intelligence Freelance
Inscription : mars 2005
Messages : 818
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 : 818
Points : 1 092
Points : 1 092
1) pas le temps de tester

3) erf exact désolé.
chez nous on aurait chargé les données dans des tables et fait du transact SQL

il faut que je transforme mon fichier structuré?
>> si tu peux tout mettre sur un même enregistrement alors oui ce sera plus facile (tDenormalize?), il suffira de parcourir ton enregistrement.

Ils proposent qque chose sur le forum officiel ?
Benoit_Durand 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 17h29.


 
 
 
 
Partenaires

Hébergement Web