Convertit deux jeux de données (CRTE et GEOT) au format Frictionless
Approche
On a converti le premier jeu de données à la main, puis on a écrit un script insitu_to_frictionless.py
pour faire les suivants.
Pour pouvoir convertir les jeux de données de manière incrémentale, on supporte les deux formats. Lors du chargement des métadonnées, inSITu détecte le format, et si c’est du Frictionless, il le charge en le mappant vers notre modèle existant.
On a mis en place des tests pour valider que les nouvelles métadonnées sont bien équivalentes à celles d’origine. Pour cela, on garde une copie de la version insitu (toto.ref
) à côté du nouveau format (toto.yml
).
Colonnes
Avec Table Schema il est recommandé (mais pas requis) de décrire toutes les colonnes du fichier source, dans le bon ordre. On n’a pas cherché à le faire ici, dans la mesure où dans notre cas d’utilisation on ne décrit que les colonnes qui nous intéressent, et qu’on les référence par leur nom ou par leur index.
Types
On mappe les types standards vers les types SQL correspondants.
On explore la possibilité d’ajouter des types spécifiques pour décrire nos concepts métier. Pour cela, on ajoute un type commune
équivalent à notre raccourci insee_com
.
Transformations
Notre approche étant de décrire le fichier source tel qu’on le reçoit, on a commencé à exprimer les étapes de transformation (nettoyage, renommage de colonnes…) appliquées par insitu sous forme d’un pipeline
Frictionless, utilisant les steps
proposés par le framework.
On explore la possibilité d’ajouter nos propres steps lorsque ceux fournis ne suffisent pas. On ajoute ainsi :
- un step
row-skip
que l’on mappe vers notre attributskip_values
; - un step
field-rename
qui renomme une colonne, tout en préservant l’information de quel était le nom de la colonne source.
Autres correspondances
Liste non exhaustive :
- on mappe
headerRows
vers notreskip_rows
- ...
Échappement
Enfin, lorsque les concepts insitu ne peuvent pas être représentés facilement dans la description Frictionless, on ajoute une clé insitu
qui permet d’ajouter nos attributs spécifiques, au moins dans un premier temps, à titre de transition.