Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suppression d'un jeu de données #2457

Open
nleguillarme opened this issue Apr 6, 2023 · 19 comments
Open

Suppression d'un jeu de données #2457

nleguillarme opened this issue Apr 6, 2023 · 19 comments

Comments

@nleguillarme
Copy link

Bonjour

Je n'ai pas trouvé dans la documentation comment supprimer un jeu de données qui contient des données.

J'ai essayé en supprimant les données dans la table occtax, mais les observations sont toujours là.

Merci d'avance.

@camillemonchicourt
Copy link
Member

En effet une donnée est forcément associée à un JDD.
Il n'est donc pas possible de supprimer un JDD sans supprimer les données qui y sont associées.

Quand des données sont saisies dans Occtax, elles sont automatiquement envoyées aussi dans la Synthèse (qui agrège les données saisies dans Occtax, les données venant de protocoles de suivis, les données historiques ou partenaires importées...).

Les JDD listent le nombre de données associées à celui-ci dans la Synthèse.

Cependant quand on supprime des données saisies dans Occtax, elles sont aussi supprimées dans la Synthèse.
Je viens de tester à nouveau sur le serveur de DEMO (https://demo.geonature.fr/geonature/) en version 2.12.0 et c'est bien le cas.

Etes-vous certain d'avoir supprimé les données associées à ce JDD ?

@nleguillarme
Copy link
Author

Non, c'est bien la le problème, je ne suis pas sûr de savoir comment supprimer les données.
J'ai effacé tout le contenu des tables occtax (releves, occ_counting, etc.), mais les données continuent à apparaître dans la synthèse.

@DonovanMaillard
Copy link
Contributor

Avez vous fait un delete ou avez vous tronqué totalement les tables ? De mémoire, le truncate ne déclenche pas les trigger donc ne répercute pas les suppressions dans la synthèse... de mémoire

@camillemonchicourt
Copy link
Member

Oui il faut supprimer les données dans la table des relevés d'Occtax.
C'est aussi possible de le faire depuis l'interface d'Occtax.

Cela les supprime aussi dans la Synthèse.

@nleguillarme
Copy link
Author

J'ai réinitialisé la BDD geonature pour recommencer à zéro.

Malheureusement, il y a encore eu un soucis dans mes pipelines d'acquisition de données, ce qui a entraîné des duplications. De plus, les données apparaissent bien dans la synthèse mais pas dans Occtax (qui n'affiche que les trois trois exemples (Ablette et Grenouille rousse).

Est-ce qu'il y aurait quelque part dans la doc la requête SQL qui permet de vider complètement un dataset ?

@camillemonchicourt
Copy link
Member

Si vous avez des données dans la Synthèse, mais plus dans Occtax, c'est que vous n'avez pas supprimé les données dans Occtax normalement.

Car quand on supprime un relevé dans Occtax, le trigger tri_delete_synthese_t_releve_occtax sur la table pr_occtax.t_releves_occtax lance la fonction pr_occtax.fct_tri_synthese_delete_releve() qui supprime les observations correspondantes dans la Synthèse.

Il faudrait plus de détails sur ce que vous avez fait pour comprendre ce qui n'a pas été fait correctement.

Et vous dites que vous avez réinitialisé la BDD de GeoNature mais qu'il reste des données dans la Synthèse qui ne sont pas dans Occtax.

Pouvez-vous expliciter ce que vous avez fait et ce que vous faites plus précisément ?

@nleguillarme
Copy link
Author

Ok, en fait les données ne s'affichaient pas car je n'avais pas associé le module Occtax à mon dataset lors de la création.
Mais sauf erreur de ma part, pas possible de supprimer tous les relevés en une opération ?

@camillemonchicourt
Copy link
Member

OK les données étant dans les tables du module Occtax, c'est discutable qu'elles ne soient pas affichées dans le module si leur JDD n'est pas associé au module Occtax.
Mais c'est certainement nécessaire depuis que l'on peut dupliquer le module Occtax (#621).

Il n'est pas possible de supprimer tous les relevés d'Occtax depuis l'interface et ce n'est pas un cas d'usage ni un besoin qui soit remonté jusqu'à présent.

Mais il est possible de faire ça directement dans la BDD (en connaissant et maîtrisant celle-ci.
La manière classique est de faire TRUNCATE pr_occtax.t_releves_occtax pour vider la table des relevés.
Cependant, comme indiqué dans la documentation de PostgreSQL (https://docs.postgresql.fr/9.6/sql-truncate.html), un TRUNCATE ne lance pas les triggers ON DELETE.

Donc il me semble qu'il soit possible de lancer DELETE FROM pr_occtax.t_releves_occtax; et que dans ce cas cela va supprimer tous les relevés de la table Occtax, mais aussi lancer le trigger tri_delete_synthese_t_releve_occtax qui va supprimer les observations correspondantes dans la Synthèse.

Mais à faire en connaissant bien la BDD de GeoNature et PostgreSQL.

@nleguillarme
Copy link
Author

Merci pour ces infos.

Je comprends que le besoin de supprimer l'ensemble des données d'un dataset n'ait pas été remonté jusqu'à présent si les données sont principalement entrée "manuellement". Nous avons développé de notre côté des pipelines d'acquisition de données depuis iNaturalist et Pl@ntNet, et on se retouve parfois avec des petits soucis qui nécessitent de relancer l'acquisition de zéro, d'où le besoin de réinitialiser les datasets correspondant.

Ces pipelines sont destinés à être diffusés plus largement. Je sais que @DonovanMaillard notamment est potentiellement intéressé.

@DonovanMaillard
Copy link
Contributor

oui on peut faire un DELETE FROM t_releves_occtax, en faisant attention aussi aux "cascade" pour virer les occurrences et dénombrements. En soit, c'est la suppression des dénombrements qui déclenchent les triggers vers la synthèse.

En effet, c'est un autre sujet mais je n'oublie pas de reprendre contact pour le moissonnage depuis Inaturalist. Or dans notre cas, ca va directement aller en synthèse sans passer par occtax.

@camillemonchicourt
Copy link
Member

OK je vois mieux le contexte.

Si vous importez des données depuis des sources externes (iNaturalist, Pl@ntNet...) je conseillerai de ne pas les importer dans Occtax (qui est avant tout un outil de saisie d'observations) mais uniquement dans la Synthèse qui est faite pour cela.

Par ailleurs, si vous avez développé des outils d'import d'iNaturalist et/ou Pl@ntNet vers GeoNature, nous sommes intéressés si vous pouvez indiquer où est le code source ?

Merci.

@nleguillarme
Copy link
Author

Ok, merci pour le conseil. Je ferais bien le test immédiatement, mais la documentation des routes n'est pas accessible : https://docs.geonature.fr/development.html#documentation-des-routes
Auriez-vous un autre pointeur vers les routes à utiliser pour charger des données dans la synthèse ?

Pour l'instant, nous utilisons les routes "occtax/only/releve" puis "occtax/releve/{releve_id}/occurrence".

Le code n'est pas encore dispo (il faut qu'on refasse une passe dessus) et encore moins documenté, mais on préviendra dès que ce sera le cas. Rapidement, il s'agit de pipelines ETL avec acquisition depuis iNat et Pl@ntNet via leurs APIs respectives, alignement des taxons avec l'API TaxRef, transformation vers la structure de données GeoNature et chargement dans OccTax via l'API. Le tout orchestré par Airflow

@camillemonchicourt
Copy link
Member

Il n'y a actuellement pas d'API POST vers la Synthèse actuellement.

En projet - #736

@nleguillarme
Copy link
Author

Ok c'est noté, merci ! On va donc rester sur notre approche actuelle en attendant que cette fonctionnalité soit disponible.

@camillemonchicourt
Copy link
Member

Je pense quand même que ce n'est pas pertinent d'importer des données externes en masse dans le module Occtax qui est un module de saisie.

@nleguillarme
Copy link
Author

Mais est-ce qu'il existe une alternative ?

@DonovanMaillard
Copy link
Contributor

Pour ma part, je pense plutôt à récupérer les données via un script Python sur l'API d'iNaturaliste, puis les pousser dans une table dédiée (ou directement en synthèse?) via sqlalchemy.

Ca nous épargne le manque de route Post vers la synthèse. Et en passant par une table intermédiaire, ca nous permet de déclencher certaines opérations par des triggers et/ou jointures pour le rattachement au taxref par exemple. Dans tous les cas, je ne passerai pas par Occtax effectivement, en allant directement en synthèse ça nous permet de gérer les sources et de gérer plus facilement les écarts de formats entre la source et le standard.

@camillemonchicourt
Copy link
Member

Ouais ou sinon des scripts qui alimentent directement la BDD dans la table Synthèse.
Mais oui l'idéal serait d'aboutir sur l'API Post de la Synthèse.

@nleguillarme
Copy link
Author

Je serai ravi de partager aux échanges sur le sujet. Jusque là on a fait au mieux avec notre connaissance (très limitée) du fonctionnement de la BDD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants