#1 Tue 02 July 2013 17:43
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
SQL Executor
Bonjour à tous,
Je cherche à envoyer des données vers une base postgis en effaçant au préalable celle portant un attribut spécifique. Pas de souci pour mettre cela en pratique si ce n'est que je bute sur la façon d'articuler avec des sources multiples : au lieu de pointer vers un fichier en particulier, je pointe vers un répertoire (qui me servira de code à chercher / effacer dans la base). Mais FME va donc effacer à chaque fois les entités portant le code incluant celle qu'il vient juste de charger. Pas sur que je sois clair là...
Je voudrais supprimer les enregistrements portant tel code de ma base puis lire et traiter l'ensemble des données sources; et non pas lire / effacer / lire / effacer etc.
Une idée ?
Hors ligne
#2 Wed 03 July 2013 10:20
Re: SQL Executor
Pas tellement clair ton souci un petit schéma peut-être ?
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#3 Wed 03 July 2013 10:26
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
Re: SQL Executor
En entrée : un répertoire contenant plusieurs lots Edigéos.
Actuellement, je fais Edigéo => PostGIS. Pas de souci, c'est ok.
Maintenant, je veux supprimer les données portant le même code insee avant l'import. Je récupère ce code dans mon traitement.
Donc :
Edigéo => récupération INSEE => Suppression dans la base des entités avec insee=insee => insertion des nouvelles données.
Cela fonctionne parfaitement sauf sur un point : FME me supprime mes données pour chaque fichier edigéo que je lis. Par exemple :
EDIGEO 1 => Suppression des entités existantes dans la base => Insertion de celle de EDIGEO1
EDIGEO 2 => Suppression des entités existantes dans la base (donc celle de EDIGEO 1) => Insertion ...
En résumé, comment puis-je indique à FME de lire les données, récupérer les insee et faire les delete puis seulement l'ensemble des inserts ?
Hors ligne
#4 Wed 03 July 2013 12:35
Re: SQL Executor
De mémoire, je sais qu'il y a un transformer qui permet d'attendre que tous les éléments soient passé avant de continuer mais je n'ai plus son nom. Je suis sûr que M. Gayte ou quelqu'un d’autre va nous le rappeler !
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#5 Wed 03 July 2013 12:49
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
Re: SQL Executor
hum peut-être FeatureHolder alors
A voir s'il prend toutes les entités ou simplement celle du jeu de données en cours. Je teste ça cet après midi
Merci du rappel en tout cas.
Hors ligne
#6 Wed 03 July 2013 13:13
- Pierre
- DesCartesPourUnMondeMeilleur
- Date d'inscription: 22 Sep 2005
- Messages: 1643
Re: SQL Executor
Aloha,
Une autre idée serait de procéder par workbench imbriqués. Un projet "maître" qui lit vos données EDIGEO, récupère l'ensemble des codes INSEE. Vous envoyez l'ensemble de ces code INSEE sous forme d'un seul objet à un workbench (les codes sont envoyés dans un paramètre publié), celui-ci s'exécute et se charge de faire avec un creator (pour déclencher le traitement) et un sqlexecutor de purger vos tables. Le Workbench executor a un paramètre pour attendre la fin d'exécution. Puis ensuite, le flux des objets est envoyé vers le workbench d'insertion des objets.
Sinon, oui, FeatureHolder.
Bonne continuation,
art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.
Hors ligne
#7 Wed 03 July 2013 13:26
Re: SQL Executor
Pour moi il faut procéder en deux étapes avec deux projets fmw : la suppression des enregistrements de la commune puis le chargement de toutes les sections de la même commune.
L'enchaînement peut se faire dans un exécutable .bat (avec éventuellement du tcl ou du python) ou avec un WorkspaceRunner dans le projet de suppression. L'identifiant de la commune à supprimer/charger peut être extrait du nom du répertoire contenant les données et passé en paramètre.
Le premier projet (suppression) ne doit pas avoir de jeu de données source mais un simple Creator. Cela donne :
Creator->ParameterFetcher->SqlExecutor (delete...) ->WorkspaceRunner(chargement).
Hors ligne
#8 Wed 03 July 2013 17:01
- pierreb
- Participant actif
- Lieu: La Rochelle
- Date d'inscription: 3 Oct 2011
- Messages: 73
Re: SQL Executor
Ok, merci à tous pour ces infos, j'y vois nettement plus clair. Je vais mettre tout ça en pratique et voir ce qui est le plus efficace.
Hors ligne