Skip to content

Convertit deux jeux de données (CRTE et GEOT) au format Frictionless

Ronan Amicel requested to merge frictionless-2 into main

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 attribut skip_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 notre skip_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.

Edited by Ronan Amicel

Merge request reports