-
Notifications
You must be signed in to change notification settings - Fork 31
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
Remontée en base de fichier GTFS et calculs des prochains départs #2105
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Quelques notes sur le WIP:
- Voir usage de
NimbleCSV.RFC4180
ici https://github.com/etalab/transport-labs/pull/1/files - Il faudra "assez rapidement" faire un test de masse pour vérifier le comportement de la lib Unzip sur la totalité des fichiers (on peut avoir des surprises) -> je peux me charger de ça sans souci en asynchrone ; histoire d'éviter qu'on avance trop et que seuls X% des fichiers sont correctement traités par exemple
- On gagnerait à dégager un "mock S3" qui travaille juste avec un répertoire en local, ou structurer le code de façon à ce que ça joue bien sans avoir à lancer un "faux S3" en local et sans cellar distant
- Dans le futur ça sera peut-être intéressant de faire un "pré-cache local" du téléchargement S3 (notamment en dév) pour ne pas télécharger à chaque tour
Beau boulot !
apps/db/lib/db/gtfs_stop.ex
Outdated
field(:location_type, :binary) | ||
end | ||
|
||
def fill_stop_from_resource_history(resource_history_id) do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même en mode WIP, le code est top !
Autres éléments discutés par téléphone:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je trouve ça très cool, bon boulot ! Le code me parait globalement être une bonne base et demande maintenant à être testé en production avec plusieurs GTFS et cas. C'est une excellente base sur laquelle construire.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Quelques petites remarques, mais c'est mineur (nommage etc).
On pourra se faire un exercice de "mise en place de spécs" dans une prochaine PR, d'autant plus que le GTFS-RT après sera utilisé pour corriger la timetable.
Une approche pourrait être de publier notre propre "testing set", voire, de le mutualiser avec MobilityData, ou de nous appuyer sur un outil existant solide pour comparer l'interprétation.
Il y a un conflit à régler !
Superbe boulot !!!
PR assez grosse, en deux parties.
Désolé pour la taille, mais elle a l'avantage de ne "rien faire" pour le moment, ce qui est moins stressant.
Les imports doivent pour l'instant être lancés à la main, le calcul des prochains départs est implémenté, mais pas encore utilisé.
Remontée en base de GTFS
Cette partie commence par un super stream.
Stream depuis S3 du contenu du zip
Stream de decodage du contenu CSV
stream de transformation du contenu pour se préparer à l'insertion
Stream d'insertion vers la base de données
Chaque fichier du CSV du GTFS a sa table avec des noms de colonnes qui correspondent.
Sauf pour calendar, qui a une colonne additionnelle qui permet de faciliter les requêtes par la suite.
Plusieurs GTFS vont pouvoir être importés dans les mêmes tables, car à chaque import est associé un data_import_id.
On pourra aussi importer plusieurs fois la même ressource history au besoin.
Toutes les tables du GTFS ne sont pas encore importées, il y a pour l'instant :
Pourquoi celles-ci ? Car...
Calcul des prochains départs 🚂
Première utilisation de nos tables GTFS : calculer les prochains départs. C'est un premier jet, et ça a l'air de fonctionner.
C'est pour le moment une grosse requête SQL qui s'en charge, mais qui n'est pas très lisible.
Elle gère les calendriers (calendar.txt) et les exceptions (calendar_dates.txt), les trips qui commencent un jour et se termine le lendemain.
La fonction s'appelle de la manière suivante :
Ce qui va sortir tous les départs pour l'import de GTFS
data_import_id
, du stopstop_id
, ayant lieu dans les 10 minutes après le 17/1/2022 à 8h du matin.Remarques :