|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2007 Messages : 60 ![]() |
Je pars d'un ficher Excel de 40 000 lignes contenant par exemple la ville "Nantes" 3000 fois, je voudrais l'extraire dans une table "Ville" avec un identifiant mais qui soit créé qu'une seule fois (et non 3000).
J'utilise une tMap mais le problème c'est qu'on ne peut pas mettre de code sql dans celle-ci donc je vois pas comment faire. Faut-il alors passer par autre chose ? Ou y'a-t-il un moyen bien plus simple qui m'a échappé ? ps: j'ai déjà regardé d'autres posts mais cela ne m'a pas éclairci car cela semblait bien plus compliqué que moi |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
plusieurs possiblités :
- un tUniqueRow sur ta colonne ville - tu fais un update or insert dans ton output avec ta ville en clé cordialement, |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2007 Messages : 60 ![]() |
J'avais essayé avec tUniqueRow mais j'avais dû me louper avec
En tout cas ça marche avec update or insert, merci. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
En terme de performance c'est pourri pour de gros volumes.
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2007 Messages : 60 ![]() |
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
le update or insert car il va faire un insert de nantes puis 2999 updates
![]() ca marche mais c'est porc, il vaut mieux passer par un tUnique |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2007 Messages : 60 ![]() |
oui en effet j'ai essayé et c'est vrai que c'est plus rapide le tUnique.
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() ![]() Inscription : janvier 2008 Messages : 45 ![]() |
Bonjour,
Je vous rejoint dans votre discution. J'ai rencontré le meme problème moi aussi et votre discution répond à ma question. Sauf que j'ai remarqué qu'il y a un "Insert or Update" et "Update or Insert" j'aimerai bien savoir quelle est la différence entre les deux. J'ai testé les deux, je n'ai remarqué aucune différence. Merci d'avance. |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
A vérifier :
le update or insert fait un update si ca ne fait aucun update alors il insert le insert or update fait un insert si ne fonctionne pas (contrainte d'intégrité) alors il fait un update |
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2007 Messages : 60 ![]() |
oui je crois que c'est ça.
j'ai un autre souci du même type mais pas résolvable avec tUniqRow. si maintenant par exemple dans une TABLE1 j'ai une ville "Nantes" (champ nom) avec une clé primaire de 15 (champ id) dans une TABLE2 j'ai une ville Nantes (champ nom) avec une clé primaire de 10 (champ id). Imaginons que je veuille charger "Nantes" de la TABLE1 vers la TABLE2. S'il n'y a pas d'ID15 dans la TABLE2 cela va marcher mais Nantes sera en doublon. J'aimerais pouvoir vérifier le champ nom des deux tables et donc insérer que si le champ nom de la TABLE1 n'existe pas dans TABLE2. En sql je pense que c'est largement faisable mais avec Talend |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
select t1.ville from t1 left outer join t2 on t1.ville=t2.ville
where t2.id is null Cela retournera les villes de t1 non déjà présentes dans t2. Tu peux simuler la jointure avec un tMap (à éviter avant la 2.4, non testé avec la 2.4). |
|
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2008 Messages : 40 ![]() |
Bonjour
j'ai un peu le même problème sauf que c'est avec un fichier csv. J'ai une clef primaire ARR_IDPP dans mon fichier csv que je dois insérer dans ma table arr_reprise (dont le champ n'est pas une clef primaire). Je suis obligé de faire un tMap pour récupérer toutes les erreurs de chaque ligne. Pour la primary key, j'ai essayé de faire un tPostgresqlInput que je lie avec mon tMap et je compare dans mon tMap la colonne ARR_IDPP avec la colonne arr_reprise de ma table, mais cela ne fonctionne pas, car quandil n'y a rien dans ma table, je peux insérer même s'il y a plusieurs fois la même valeur de ARR_IDPP et lorsque je relance mon job, là plus rien ne marche car les ARR_IDPP sont déjà présents dans la table.... Avez-vous une idée? merci tomlaurent |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 819 ![]() |
un tUniqRow ne suffirait pas à résoudre ton problème pour n'insérer qu'un seul ARR_IDPP ? Sinon dans ton output il y a pas moyen de faire un update or insert sur cette colonne ?
cdt, |
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2008 Messages : 40 ![]() |
le problème d'un tUniqRow, c'est qu'il va me retirer la ligne ou il y a des doublons. En effet, j'ai besoin de mettre un tMap pour récupérer toutes les erreurs qu'il peut y avoir sur une ligne et de plus je peux définir mes messages d'erreurs comme ca.
N'y a t-il pas une sorte de méthode pour voir si ARR_IDPP est unique . J'ai vu qu'il existait une méthode isUnique, mais je n'ai pas réussi à l'utiliser. Sinon j'ai essayé de faire insert or Update (et l(inverse) mais je n'ai vu aucune différence. J'ai aussi voulu faire un tUniqRow et de créer deux liens vers deux tMap différents, mais c'est impossible à faire. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com