ProjetsComplémentaire
NYC Taxi Ingestion Pipeline
Job conteneurisé, à mémoire bornée, qui stream les fichiers de taxis jaunes new-yorkais vers PostgreSQL.
Vue d'ensemble
Job d'ingestion Dockerisé qui charge les CSV mensuels TLC des taxis jaunes dans PostgreSQL par paquets de taille fixe, pour que la mémoire de pic reste plate quelle que soit la taille du fichier. Construit en suivant le module Docker du Data Engineering Zoomcamp de DataTalksClub, puis isolé en job autonome.
Problème
Chaque fichier mensuel TLC contient des millions de lignes. Le charger d'un bloc dans un dataframe et l'écrire en une transaction satura la mémoire dès que les fichiers grandissent.
Solution technique
pandas produit des paquets de 100 000 lignes. Une carte de types explicite — dont Int64 nullable pour les colonnes entières pouvant contenir des nulls — garde le schéma identique d'un paquet à l'autre, ce qui évite qu'un insert échoue à mi-chemin. La première écriture crée la table à partir du schéma sans insérer de lignes ; les suivantes ajoutent. L'image se construit depuis un lockfile uv commité.
Ce que contient le dépôt
- Streaming CSV par paquets depuis les fichiers publics TLC
- Types et horodatages explicites pour un schéma stable
- Stack Docker Compose : PostgreSQL 18 avec healthcheck, plus pgAdmin
- Identifiants lus dans l'environnement, pas en argument de ligne de commande
- Image reproductible via un lockfile uv versionné
Choix techniques
- La taille de paquet est un budget mémoire
- 100 000 lignes suffisent à occuper la base sans faire déborder un ordinateur portable.
- Remplacer une fois, puis ajouter
- Relancer le job reconstruit la table au lieu de dupliquer les lignes. C'est le bon défaut pour un pipeline de cette taille.