Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 880 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 880 Rev 890
1
Créer une base de données tb_cel avant de lancer les scripts
1
Créer une base de données tb_cel avant de lancer les scripts
2
 
2
 
3
== Sommaire ==
3
== Sommaire ==
4
1) à propos de la mise à jour de juillet 2013
4
1) à propos de la mise à jour de septembre 2013
5
2) à propos de la table cel_references
5
2) à propos de la table cel_references
6
==============
6
==============
7
 
7
 
8
1) cel_references.sql
8
1) cel_references.sql
9
création de la table `cel_references`
9
création de la table `cel_references`
10
 
10
 
11
2) maj-struct-201307.sql
11
2) maj-struct-201307.sql
12
mise à jour des structure de table (les index notamment): 
12
mise à jour des structure de table (les index notamment): 
13
 
13
 
14
3) maj-cleanup-201307.sql
14
3) maj-cleanup-201307.sql
15
uniformisation des données (lon/lat, date, ...)
15
uniformisation des données (lon/lat, date, ...)
-
 
16
et des NULL vs 0 (pour nom_sel_nn et nom_ret_nn)
16
 
17
 
17
4) fix-utilisateur-32.sql
18
4) fix-utilisateur-32.sql
18
 
19
 
19
5) dedup-ordre-201307.sql
20
5) dedup-ordre-201307.sql
-
 
21
 
-
 
22
6) maj-referentiel-201307.sql
-
 
23
fix le référentiel pour les observation ayant un nom_sel_nn sans nom_referentiel en se
-
 
24
basant sur une match exact de CONCAT(nom_sci, auteur) parmi bdtfx, bdtxa et isfan
-
 
25
 
-
 
26
7) referonosaure.sql
-
 
27
MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa/isfan
-
 
28
 
20
=====
29
=====
21
6) TODO: maj-nom-ret.sql
30
8) TODO: maj-nom-ret.sql
22
TODO (pas sûr) MAJ du référentiel pour les observation ayant un nom_ret sans nom_ret_nn mais dont le nom_ret
31
TODO (pas sûr) MAJ du référentiel pour les observation ayant un nom_ret sans nom_ret_nn mais dont le nom_ret
23
 ne match pas le nom_sci en BDTFX (car en BDTFX nom_ret_nn peut être égal à 0 !)
32
 ne match pas le nom_sci en BDTFX (car en BDTFX nom_ret_nn peut être égal à 0 !)
24
 
-
 
25
7) maj-referentiel-201307.sql
-
 
26
fix le référentiel pour les observation ayant un nom_sel_nn sans nom_referentiel
-
 
27
 
33
 
28
8) maj-referentiel-und-201307.sql
34
9) maj-referentiel-und-201307.sql
29
MAJ du référentiel pour les observation n'ayant pas de nom_ret_nn (tentative de détermination par nom)
-
 
30
 
-
 
31
9) referonosaure.sql
-
 
32
MAJ des observations (valides) avec les nouvelles données générées, à partir de bdtfx/bdtxa
35
MAJ du référentiel pour les observation n'ayant pas de nom_ret_nn (tentative de détermination par nom)
33
 
36
 
34
 
37
 
35
 
38
 
36
 
39
 
37
 
40
 
38
 
41
 
39
 
42
 
40
 
43
 
41
=== 2: À propos de la table cel_references ===
44
=== 2: À propos de la table cel_references ===
42
Celle-ci existe car:
45
Celle-ci existe car:
43
* les projets doivent être indépendants (eflore, cel, projets nvjfl, ...)
46
* les projets doivent être indépendants (eflore, cel, projets nvjfl, ...)
44
* les données nécessaire à l'export et à l'import sont massif
47
* les données nécessaires à l'export et à l'import sont massives
45
* or les webservices s'appellent parfois récursivement, sont lents et inadaptés
48
* or les webservices s'appellent parfois récursivement, sont lents et inadaptés
46
 
49
 
47
La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa contenant
50
La conséquence est que la construction d'une table dérivée de bdtfx/bdtxa/isfan contenant
48
les informations utiles pour CEL s'avère nécessaire.
51
les informations utiles pour CEL s'avère nécessaire.
49
cel_references.sql construit une telle table.
52
cel_references.sql construit une telle table.
50
 
53
 
51
Suivent quelques éléments de compréhension et exemples de requêtes liés à cette initialisation:
54
Suivent quelques éléments de compréhension et exemples de requêtes liés à cette initialisation:
52
 
55
 
53
1) Détermination des nom vernaculaires meilleurs et uniques:
56
1) Détermination des noms vernaculaires meilleurs et uniques:
54
 
57
 
55
Ce sont ceux qui ont le num_statut le plus élevés pour un num_taxon donné dans nvjfl_v2007.
58
Ce sont ceux qui ont le num_statut le plus élevé pour un num_taxon donné dans nvjfl_v2007.
56
Plusieurs méthodes sont exposées ci-dessous, sachant que le couple (référentiel, num_nom) est la clef
59
Plusieurs méthodes sont exposées ci-dessous, sachant que le couple (référentiel, num_nom) est la clef
57
unique de cel_references.
60
unique de cel_references.
58
Il existe à ce jour 16146 nom communs français distincts, 12312 num_taxon pour code_lang = fra et aucun num_statut NULL en français.
61
Il existe à ce jour 16146 nom communs français distincts, 12312 num_taxon pour code_lang = fra et aucun num_statut NULL en français.
59
1.1:
62
1.1:
60
SELECT n.num_taxon, n.nom_vernaculaire, n.num_statut, n2.num_statut FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon) WHERE n.num_taxon < 32 AND n.code_langue = 'fra' GROUP BY n.num_taxon, n.num_statut HAVING n.num_statut = MAX(n2.num_statut) LIMIT 100;
63
SELECT n.num_taxon, n.nom_vernaculaire, n.num_statut, n2.num_statut FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon) WHERE n.num_taxon < 32 AND n.code_langue = 'fra' GROUP BY n.num_taxon, n.num_statut HAVING n.num_statut = MAX(n2.num_statut) LIMIT 100;
61
# 12311 résultats
64
# 12311 résultats
62
 
65
 
63
1.2:
66
1.2:
64
SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n INNER JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' GROUP BY n.num_taxon;
67
SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n INNER JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' GROUP BY n.num_taxon;
65
# 2680 résultats
68
# 2680 résultats
66
 
69
 
67
1.3:
70
1.3:
68
SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' AND n2.num_statut IS NOT NULL GROUP BY num_taxon;
71
SELECT n.num_taxon, n.nom_vernaculaire FROM nvjfl_v2007 n LEFT JOIN nvjfl_v2007 n2 ON (n.num_taxon = n2.num_taxon AND n.code_langue = n2.code_langue AND n.num_statut > n2.num_statut) WHERE n.code_langue = 'fra' AND n2.num_statut IS NOT NULL GROUP BY num_taxon;
69
# 2680 résultats
72
# 2680 résultats
70
Mais problème ensuite: SELECT n.* from cel_references NATURAL JOIN nvjfl_v2007 n WHERE `nom_commun` = '' AND n.code_langue = 'fra';
73
Mais problème ensuite: SELECT n.* from cel_references NATURAL JOIN nvjfl_v2007 n WHERE `nom_commun` = '' AND n.code_langue = 'fra';
71
 
74
 
72
 
75
 
73
 
76
 
74
2) à propos de l'insertion dans cel_references proprement dit:
77
2) à propos de l'insertion dans cel_references proprement dit:
75
Le modèle simplifié théorique de base est le suivant:
78
Le modèle simplifié théorique de base est le suivant:
76
 
79
 
77
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `nom_sci`, `auteur`, `nom_commun`) \
80
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `nom_sci`, `auteur`, `nom_commun`) \
78
       SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, MAX(n.num_statut)	FROM bdtfx_v1_01 b LEFT JOIN nvjfl_v2007 n	ON (b.num_taxonomique = n.num_taxon AND n.code_langue = 'fra' )	GROUP BY b.num_nom \
81
       SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, MAX(n.num_statut)	FROM bdtfx_v1_01 b LEFT JOIN nvjfl_v2007 n	ON (b.num_taxonomique = n.num_taxon AND n.code_langue = 'fra' )	GROUP BY b.num_nom \
79
       UNION \
82
       UNION \
80
       SELECT "bdtxa", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, NULL				FROM bdtxa_v1_00 b LEFT JOIN nva_v2013_06 n	ON (b.num_tax = n.num_taxon AND n.code_langue = 'fra' )			GROUP BY b.num_nom \
83
       SELECT "bdtxa", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, n.nom_vernaculaire, NULL				FROM bdtxa_v1_00 b LEFT JOIN nva_v2013_06 n	ON (b.num_tax = n.num_taxon AND n.code_langue = 'fra' )			GROUP BY b.num_nom \
81
       UNION \
84
       UNION \
82
       SELECT "isfan", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, NULL FROM isfan_v2013 b;
85
       SELECT "isfan", b.num_nom, b.num_nom_retenu, b.nom_sci, b.auteur, NULL FROM isfan_v2013 b;
-
 
86
 
83
 
87
Mais évidemment, les noms communs n'existent que pour bdtfx[nvjfl], bdtxa[nva], de même que les données baseflor/baseveg.
84
Mais évidemment, les noms communs n'existe que pour bdtfx, de même que les données baseflor/baseveg. Plusieurs tables temporaires sont donc nécessaires en particulier puisque toutes les colonnes n'ont pas
88
Plusieurs tables temporaires sont donc nécessaires en particulier puisque toutes les colonnes n'ont pas
85
des indexes adaptés pour effectuer des JOIN efficace dans le cadre de ce script d'intégration particulier.
89
des indexes adaptés pour effectuer des JOIN efficaces dans le cadre de ce script d'intégration particulier.
86
 
90
 
87
Une version plus aboutie, mais spécifique à bdtfx, après création préalable de T_nvjfl_v2007, était la suivante (présence des noms communs):
91
Une version plus aboutie, mais spécifique à bdtfx, après création préalable de T_nvjfl_v2007, était la suivante (présence des noms communs):
88
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`, `nom_commun`) \
92
INSERT INTO @dst (`referentiel`, `num_nom`, `num_nom_retenu`, `num_taxon`, `nom_sci`, `auteur`, `nom_commun`) \
89
       SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci, b.auteur, n.nom_vernaculaire FROM bdtfx_v1_01 b LEFT JOIN T_nvjfl_v2007 n ON (b.num_taxonomique = n.num_taxon );
93
       SELECT "bdtfx", b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci, b.auteur, n.nom_vernaculaire FROM bdtfx_v1_01 b LEFT JOIN T_nvjfl_v2007 n ON (b.num_taxonomique = n.num_taxon );
90
 
94
 
91
 
95
 
92
À noter:
96
À noter:
93
SELECT b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci FROM bdtfx_v1_01 b where b.num_taxonomique = '';
97
SELECT b.num_nom, b.num_nom_retenu, b.num_taxonomique, b.nom_sci FROM bdtfx_v1_01 b where b.num_taxonomique = '';
94
# 3968, c'est à dire des num_taxon vides, pourtant INDEX et NOT NULL.
98
# 3968, c'est à dire des num_taxon vides, pourtant INDEX et NOT NULL.
95
Idem pour bdtxa
99
Idem pour bdtxa
96
 
100
 
97
 
101
 
98
3) à propos de baseveg/baseflor:
102
3) à propos de baseveg/baseflor:
99
Note au 16/07/2013: les schémas sont susceptibles de changer à l'avenir.
103
Note au 16/07/2013: les schémas sont susceptibles de changer à l'avenir.
100
La jointure entre bdtfx et baseflor se fait sur le référentiel ("bdtfx") et num_nom.
104
La jointure entre bdtfx et baseflor se fait sur le référentiel ("bdtfx") et num_nom.
101
À partir de là nous disposons d'un catminat_code qui correspond au code_catminat dans baseveg, afin d'obtenir le syntaxon.
105
À partir de là nous disposons d'un catminat_code qui correspond au code_catminat dans baseveg, afin d'obtenir le syntaxon.
102
Quelques exemples:
106
Quelques exemples:
103
 
107
 
104
SELECT code_catminat, syntaxon, lumiere, hum_atmos, temperature, oceanite, ph_sol, hum_edaph, texture_sol FROM baseveg_v2013_01_09;
108
SELECT code_catminat, syntaxon, lumiere, hum_atmos, temperature, oceanite, ph_sol, hum_edaph, texture_sol FROM baseveg_v2013_01_09;
105
SELECT * from baseflor_v2012_12_31 where cle = 1174;
109
SELECT * from baseflor_v2012_12_31 where cle = 1174;
106
 
110
 
107
SELECT * from baseveg_v2013_01_09 where code_catminat = '05/3.0.1.0.2' AND niveau = 'ALL';
111
SELECT * from baseveg_v2013_01_09 where code_catminat = '05/3.0.1.0.2' AND niveau = 'ALL';
108
# 7 résultats
112
# 7 résultats
109
SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat) WHERE f.BDNT = "BDTFX" and f.cle = 1174;
113
SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat) WHERE f.BDNT = "BDTFX" and f.cle = 1174;
110
# 7 résultats
114
# 7 résultats
111
SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat AND v.niveau = 'ALL') WHERE f.BDNT = "BDTFX" and f.cle = 1174;
115
SELECT f.num_nomen, f.num_taxon, f.catminat_code, f.ve_lumiere, f.ve_temperature, f.ve_continentalite, f.ve_humidite_atmos, f.ve_humidite_edaph, f.ve_reaction_sol, f.ve_nutriments_sol, f.ve_salinite, f.ve_texture_sol, f.ve_mat_org_sol FROM baseflor_v2012_12_31 f LEFT JOIN baseveg_v2013_01_09 v ON (f.catminat_code = v.code_catminat AND v.niveau = 'ALL') WHERE f.BDNT = "BDTFX" and f.cle = 1174;
112
# 1 résultat
116
# 1 résultat
113
Nous utilisons v.niveau = ALL pour nous assurer la présence d'un seul f.num_nomen dans `T_basevegflor` et donc assurer l'unicité de la PRIMARY KEY de `cel_references`
117
Nous utilisons v.niveau = ALL pour nous assurer la présence d'un seul f.num_nomen dans `T_basevegflor` et donc assurer l'unicité de la PRIMARY KEY de `cel_references`