Ingestion par lots : complète ou incrémentale
Charger par lots, c'est copier la source à intervalle régulier : en entier si elle est petite, ou seulement les lignes modifiées depuis le dernier filigrane quand elle grossit.
- batch
- full load
- incrémental
- filigrane
- watermark
- updated_at
- lot
Syntaxe
-- Chargement complet : on recopie toute la source à chaque passageSELECT * FROM source;-- Chargement incrémental : seulement ce qui a changé dans la fenêtreSELECT *FROM sourceWHERE mis_a_jour_le > :filigrane -- fin du dernier lot réussi AND mis_a_jour_le <= :borne_haute; -- figée au début du lot-- Après un chargement réussi, et seulement là :-- filigrane := borne_hauteExemple
CREATE TABLE commandes_source ( id INTEGER PRIMARY KEY, client TEXT, montant REAL, mis_a_jour_le TEXT);INSERT INTO commandes_source VALUES (1, 'Durand', 135.0, '2026-10-31 18:05'), -- modifiée hier soir (2, 'Moreau', 45.0, '2026-10-31 09:15'), (3, 'Petit', 80.0, '2026-10-31 17:40'), (4, 'Leroy', 60.0, '2026-10-29 11:00'), -- déjà chargée (5, 'Garnier', 99.0, '2026-11-01 00:20'); -- arrivée après la borneCREATE TABLE etat_pipeline (flux TEXT PRIMARY KEY, filigrane TEXT);INSERT INTO etat_pipeline VALUES ('commandes', '2026-10-31 00:00');-- Lot du 1er novembre, borne haute figée à minuitSELECT id, client, montant, mis_a_jour_leFROM commandes_sourceWHERE mis_a_jour_le > (SELECT filigrane FROM etat_pipeline WHERE flux = 'commandes') AND mis_a_jour_le <= '2026-11-01 00:00'ORDER BY mis_a_jour_le;-- 2 | Moreau | 45.0 | 2026-10-31 09:15-- 3 | Petit | 80.0 | 2026-10-31 17:40-- 1 | Durand | 135.0 | 2026-10-31 18:05-- Le chargement a réussi : on avance le filigrane jusqu'à la borneUPDATE etat_pipeline SET filigrane = '2026-11-01 00:00' WHERE flux = 'commandes';-- La commande 5 sera prise par le lot suivant.À retenir
- Le chargement complet reste le bon choix pour les petites tables de référence (pays, magasins) ou quand la source n'a aucune colonne de date fiable.
- La colonne de filigrane doit être remplie par la base source à chaque modification et indexée ; une date saisie par l'application peut mentir ou rester vide.
- Rejouez un léger recouvrement (par exemple reprendre une heure avant le filigrane) pour rattraper les transactions validées en retard, et rendez le chargement idempotent pour absorber ces doublons.
- Piège : un filtre sur la date de modification ne voit jamais les suppressions. Il faut une capture des changements (CDC), un indicateur de suppression logique ou une réconciliation complète périodique.
- Piège : avancer le filigrane avant d'avoir confirmé le chargement. Si l'écriture échoue ensuite, les lignes de la fenêtre sont perdues sans erreur visible.
Voir aussi
- Capture des changements (CDC)La CDC lit le journal de transactions de la base source pour émettre chaque insertion, modification et suppression. On l'utilise pour répliquer en quasi temps réel sans requêter les tables.
- Idempotence : rejouer sans doublonUne tâche idempotente produit le même résultat qu'on la lance une fois ou dix. C'est la condition pour relancer un pipeline après une panne sans créer de doublons ni perdre de lignes.
- Airflow : DAG, tâches et backfillUn DAG Airflow décrit en Python des tâches et leurs dépendances, sans cycle, avec un planning. On l'utilise pour lancer un pipeline chaque jour, relancer les échecs et rattraper le passé.