Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

Re: SQL Executor

Pas tellement clair ton souci big_smile 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

Loic_GR
Moderateur
Lieu: Besancon
Date d'inscription: 12 May 2011
Messages: 1022
Site web

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 smile

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 smile

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

ogayte
Participant assidu
Lieu: Saint-Estève
Date d'inscription: 6 Mar 2006
Messages: 658
Site web

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).


Olivier Gayte
http://www.veremes.com
+33 (0)4-68-38-65-27

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

 

Pied de page des forums

Powered by FluxBB