PDA

View Full Version : kettle,transformation,filtrage lignes



clement
05-30-2007, 01:00 PM
Bonjour,

Je souhaite réalise un filtrage de lignes et je rencontre un probleme. L'exemple suivant est factice mais il illustre bien mon problème.

J'ai une table "liste des habitants de paris" (t_paris) avec les champs "nomParis" et "n° de secu".
J'ai une table "liste des habitants du 5ème arrondissement" (t_5eme) avec les champs "nom5eme","adresse" et "telephone".

J'arrive à extraire les lignes de t_paris avec "nomParis=dupont" avec les étapes suivantes :

1-extraction depuis table

source : t_paris


2-filtrage lignes

source : t_paris
condition : nomParis=dupont
destination du vrai : insertion dans table
destination du faux : factice

3-insertion dans table

cible : t_resultat

3bis-factice

(il n'y a pas de config pour celle-ci puisqu'elle ne fait rien)




Question : Comment faire pour extraire les lignes de t_paris dont le "nom" est dans les "nom" de t_5eme ?

J'ai essayé de lier la table t_5eme avec Filtrage lignes mais j'ai un message d'erreur qui apparaît :
"PDI a détecté des lignes avec un nombre de champs différents, ce qui est interdit dans une transformation. La première ligne contient 2 champs, une autre 3"
Je voulais essayer d'écrire la condition "nomParis" IN LIST "nom5eme"



(si malgré tout je force la main en validant quand même le lien, lorsque je prévisualise la transformation il m'indique "Erreur inattendue lors de lévaluation : java.lang.RuntimeException: Unexpected error evaluation condition [nomParis IN LIST nom5eme] in part [Atomic : get fieldnrs right exact] for row:[nomParis=martin,n° secu=12345]
Unable to find value for field [nom5eme] in the input row!)

a+,=)
-=Clément=-

BPM_PBE
06-04-2007, 01:49 PM
Bonsoir,

Si j'ai bien compris votre souci : un filtre de type IN doit être entre parenthèse, avec dans les parenthèses la liste des valeurs. Pour un filtre avec un seul élément, il faut choisir LIKE.

Cordialement,
Patrick

Helpmemorvan
06-06-2007, 04:25 AM
Bonjour,

je ne sais pas si ton problème est résolu donc je poste.


je récapitule si j'ai bien compris tu veux matcher

nomParis=nom5eme

la solution est peut etre de faire un merge join(jointure comparaison ligne en français)
avec en champ clef dans ta condition de jointure NomParis d'un coté et nom5eme de l'autre
a priori l'éffet affiché sera

nomparis,n° de sécu, nom5eme, adresse, téléphone
dupont,1220036,dupont,adresse1, telephone1

et les lignes qui ne matchent pas seront ou non affichées suivant ton type de jointure.

pour le type de jointure je te laisse te renseigner sur laquelle correspond le mieux à ton cas INNER, LEFT OUTER, RIGHT OUTER ou FULL OUTER, a priori je pense quand meme que c'est la LEFT OUTER

évidemment on ne passe plus par un opérateur de filtre.

morvan


rajout de ma part: apparemment la jointure comparaison ligne ne fonctionne pas sur les versions antécédentes de kettle (bug) il parait qu'il faut la version 2.5.0M2 a l'heure actuel je ne sais pas où la trouver

clement
08-27-2007, 06:41 AM
Hi,
Bonjour,

Here is a solution I found, waiting for "Jointure comparaison ligne" to be corrected :
Voici la solution que j'ai trouvée en attendant que "jointure comparaison ligne" soit corrigée :
http://img441.imageshack.us/img441/3201/exempleforumkettlepariswg7.png



a+, =)
-=Clément=-