Mise à jour de table avec UPDATE

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Mise à jour de table avec UPDATE

Camila
Bonjour à tous,

Je vois qu'il y a déjà pas mal de post là-dessus... Mais je vais en rajouter une petite couche ;)

Je voudrais mettre à jour une colonne d'une table avec les données d'une colonne d'une autre table. ça ne fonctionne pas.

J'ai essayé ça:
ALTER TABLE table1 ADD COLUMN value1 double;
update table1 set value1 = value2 from table2 where a.id = b.id from table1 a, table2b;

Puis ensuite, j'ai trouvé ce post
http://orbisgis.3871844.n2.nabble.com/select-into-td7574632.html#a7574634 où Antoine propose une requête SQL. Or, elle ne fonctionne pas non plus chez moi.

Je voulais savoir s'il y avait eu des choses de développées là-dessus depuis? je pense notamment à la nouvelle version (Orbisgis monomap que vous avez présenté à l'OGRS)... D'ailleurs, cette version est-elle déjà disponible ou le sera t-elle dans la semaine ?

Merci par avance.
Cordialement,
Camila


Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Gwendall Petit
Administrator
Bonjour Camila,

Tu pointes là un sujet brûlant d'OrbisGIS :-)

Je viens de tester et malheureusement je fais le même constat que toi; ça ne marche pas.
Nous avons créé un ticket ICI qui n'est toujours pas fermé. Qui plus est, les développements réalisés pour ce problème ne seront fait que sur la V4.0.

En attendant, sur ta version, il va falloir trouver un moyen moins "catholique" pour résoudre ton problème.
Là je verrais bien une jointure entre tes deux tables :
CREATE TABLE table3 AS SELECT a.*, b.value2 FROM table1 a, table2 b WHERE a.value1=b.value2;
pour ensuite ne conserver que ce qui t'intéresse.
CREATE TABLE table4 AS SELECT * {except value2} FROM table3;
DROP TABLE table3 PURGE;
Si jamais tu as des valeurs nulles dans l'une de tes tables (dans value1 ou value2) alors tu auras une perte d'information (moins de lignes)... mais on verra ça après.

Pour l'instant je ne vois que ça.

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Gwendall Petit
Administrator
Petit complément par rapport à ma précédente requête :

Si jamais value1 et value2 ont le même nom (ça peut arriver)  alors il faut penser à renommer value2 dès la première requête sinon il y aura un conflit (lié au doublon).
CREATE TABLE table3 AS SELECT a.*, b.value2 as value2_b FROM table1 a, table2 b WHERE a.value1=b.value2;
CREATE TABLE table4 AS SELECT * {except value2_b} FROM table3;
DROP TABLE table3 PURGE;
Cordialement,

Gwendall

Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Camila
Bonjour,

Oui je m'en doutais bien ! :)

J'ai donc fait comme tu m'as dit en l'intégrant dans mes boucles...
Ce qui rajoute encore des étapes...

Mes scripts beanshell sont assez lents à s'exécuter... enfin pas des heures non plus ! Mais quand même, ça met pas mal de temps par indicateur... Je m'explique :
Dans mes scripts, j'ai une boucle for qui teste les répertoires des scénarios, avec des if dedans pour réaliser des actions si des données sont disponibles. Puis une boucle while intégrée dans le for, pour balayer toutes les années disponibles pour les données. Puis dans tout ça, mes requêtes à exécuter.

Si je fais ma boucle while de 2010 à 2020 par exemple, là ça ne met pas beaucoup de temps. Mais si je l'arrête à 2050, ou pire encore à 2100... là ça commence à traîner... ça m'embête un peu puisqu'à long terme, il faudra que ça aille jusqu'à 2100... Et pour les indicateurs où il n'y a pas beaucoup de calcul, c'est pas trop lent.. Mais dès que j'ai des calculs à opérer, ça prend du temps...

Est-ce qu'il n'y aurait pas un moyen que ça soit un peu plus rapide ? Est-ce que c'est dû à la mémoire?
Si vous avez des informations là-dessus, ou des solutions, ça m'intéresse ! :-)

Bonne fin de journée.
Cordialement,
Camila.
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Gwendall Petit
Administrator
Bonjour Camila,

La question de l'optimisation de ton script est effectivement un point important et compliqué, car selon moi il y a deux parties qui peuvent jouer : l'algorithmie (Beanshell) et le SQL. Sur ces deux points il y surement des moyens d'optimiser mais ce n'est pas évident de juger sans les éléments.
Sur la partie SQL, ce que je peux dire c'est que certaines opérations complexes (dans lesquelles tu pourrais par exemple avoir des WHERE conditions importantes (ST_Intersects() AND ... AND ...)) méritent parfois d'être décomposées en plusieurs étapes. L'inverse peut également être valable si tu as plusieurs petites requêtes qui s'enchaînent.

Concernant la mémoire allouée, à quelle hauteur l'as-tu définies ? 256Mo ? 512Mo ? ...
Si tu n'es pas au-dessus des 512Mo alors je pense que tu aurais intérêt à passer au minimum à 1024Mo de mémoire. Tes traitements gagneraient en temps de calcul.
Pour augmenter la mémoire allouée, je te conseille de regarder ce post.

En espérant que ça t'aide.

Cordialememt,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Camila
Bonjour,

Merci pour la réponse !

J'ai donc modifié mon orbisgis.sh en lui spécifiant :
java -Xmx2048M -jar orbisgis-ui-4.0-SNAPSHOT-jar-with-dependencies.jar $*

au lieu de :

java -Xmx1024M -jar orbisgis-ui-4.0-SNAPSHOT-jar-with-dependencies.jar $*

ça n'a pas changé mon problème de temps pour l'exécution de mes scripts...
Donc ça doit sûrement venir de mes scripts beanshell. Cependant, je ne pense pas que ça soit du point de vue SQL... Mais plutôt au niveau de l'algorithmie.
J'ai décomposé un peu mes scripts. ça prend beaucoup de temps si je souhaite créer des tables avec comme tu me le suggérais des insert into à la suite les uns des autres (à défaut de la fonction update avec des champs d'une autre table)... Mais plus particulièrement, les tables que je crée ainsi ne sont vraiment pas lourdes (quelques colonnes (au maximum 6) et quelques lignes (au maximum 15/20) uniquement donc en SQL, ça devrait pas mettre trop de temps à priori), donc c'est pour cela que je me dis que mes boucles sont peut-être un peu bancales...

Pensez-vous qu'il serait possible que quelqu'un chez vous puisse jeter un œil à un de mes scripts seulement ?  juste pour un indicateur par exemple... Ce qui me permettrait ensuite de modifier mes autres scripts en prenant exemple sur un indicateur...

Merci de me tenir informée.
Bonne fin de journée. Cordialement,
Camila.
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Gwendall Petit
Administrator
Bonjour Camila,

Il doit effectivement y avoir un moyen d'améliorer ça si tes tables sont si petites.

Envois-nous ton script, soit sur la mailing liste (si tu penses que ce n'est pas confidentiel) soit sur nos boîtes mails et on essayera de regarder (en se rappelant que nous sommes actuellement en période de vacances ... )

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Camila
Bonjour,

Merci bien !

Je vous mets à la fin du message un script complet... qui crée des tables pour chaque scenario et année disponible, puis des tables avec les moyennes spatiales par scenario, mais aussi une table avec les moyennes pour tous les scénarios et toutes les années... (Pour l'exemple, je reste sur la densité de population... à moins que vous soyez lassés par ma densité de population... dans ces cas-là, dites-le moi et je vous mets un peu de nouveauté... ;) )

Bien sur si vous êtes en vacances, je ne voudrais pas vous embêter... Surtout qu'en attendant que vous reveniez de vacances, je peux travailler sur d'autres choses... Donc ne vous embêtez pas avec ça et profitez des vacances ! Et on peut voir ça à votre retour plutôt.. !?

En tout cas merci !
Bonnes vacances à tous !
Cordialement,

Camila

Script bsh :

denspop_irstv_2910.bsh




Gwendall Petit wrote
Bonjour Camila,

Il doit effectivement y avoir un moyen d'améliorer ça si tes tables sont si petites.

Envois-nous ton script, soit sur la mailing liste (si tu penses que ce n'est pas confidentiel) soit sur nos boîtes mails et on essayera de regarder (en se rappelant que nous sommes actuellement en période de vacances ... )

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Mise à jour de table avec UPDATE

Gwendall Petit
Administrator
Bien reçu.

On te tient au courant dès que possible.

Gwendall