Vous ne connaissez pas DLT? Non, pas notre partenaire DBT… Mais bien DLT, pour Data Load Tool. 🙂
Le point commun entre les deux c’est qu’ils fonctionnent avec l’approche déclarative.
Une approche déclarative consiste à spécifier les résultats souhaités plutôt que les étapes détaillées du processus de traitement des données.
Qu’est-ce que DLT ?
DLT est une bibliothèque open-source que vous pouvez intégrer dans vos scripts Python. Elle vous permet de charger des données à partir de sources variées et parfois peu claires dans des ensembles de données structurés et en temps réel.
Pourquoi utiliser DLT ?
Maintenance automatisée et simplifiée grâce à l’inférence et l’évolution des schémas.
C’est du Python, donc c’est exécutable sur de nombreux environnements (Airflow, fonctions serverless, notebooks..). Aucune API externe, backend ou conteneur requis, DLT s’adapte aussi bien aux infrastructures micro qu’aux infrastructures plus importantes.
Interface conviviale et déclarative : Elle élimine les obstacles de connaissances pour les débutants tout en autonomisant les plus expériementés.
Fonctionnement de DLT
DLT opère de manière transparente pour transformer les données provenant de sources multiples, par exemple une API, en un ensemble de données dynamique stocké à l’emplacement de votre choix, tel que Google BigQuery. Le processus implique trois étapes fondamentales : l’extraction, la normalisation et le chargement.
Que représente ces trois étapes? Un exemple simple va être réalisé en exploitant un fichier JSON en entrée pour ensuite intégrer ses données dans une table créée sur DuckDB.
Extraction
Il faut initier le processus, un script Python est utilisé pour demander des données à une API ou une source de données. Une fois les données reçues, le script les analyse et les fournit à DLT en tant qu’entrée, qui se charge ensuite de la normalisation ultérieure des données. Dans notre exemple, nous traiterons des données JSON :
import dlt
# STEP 1 — Data statique sans schéma
pipeline = dlt.pipeline (
pipeline_name="demography",
destination="duckdb",
dataset_name="country"
)
data = [
{'country': 'USA', 'population': 331449281, 'capital': 'Washington, D.C.'},
{'country': 'Canada', 'population': 38005238, 'capital': 'Ottawa'},
{'country': 'Germany', 'population': 83019200, 'capital': 'Berlin'}
]
info = pipeline.run(data, table_name="countries")
Normalisation
DLT intègre un moteur de normalisation configurable qui décompacte de manière systématique la structure imbriquée des données en tables relationnelles. Cela implique d’inférer les types de données, d’établir des relations entre les tables pour créer des associations parent-enfant, etc. Cela rend les données prêtes à être chargées et crée un schéma qui évoluera automatiquement en cas de modifications futures des données source, telles que l’ajout de nouveaux champs ou tables. Lorsque le pipeline est déclaré, un schéma d’export peut lui être transmis.
import dlt
# STEP 2 — Data statique AVEC schéma
pipeline = dlt.pipeline (
export_schema_path="schemas/export", # <----- SCHEMA AJOUTÉ
pipeline_name="demography",
destination="duckdb",
dataset_name="country"
)
data = [
{'country': 'USA', 'population': 331449281, 'capital': 'Washington, D.C.'},
{'country': 'Canada', 'population': 38005238, 'capital': 'Ottawa'},
{'country': 'Germany', 'population': 83019200, 'capital': 'Berlin'}
]
info = pipeline.run(data, table_name="countries")
Un fichier YAML est préparé pour faire le schéma :
countries:
columns:
country:
nullable: false
data_type: text
population:
nullable: false
data_type: bigint
capital:
nullable: false
data_type: text
Chargement
Les données sont ensuite chargées dans la destination de votre choix. DLT utilise des chargements configurables, idempotents et atomiques qui garantissent que les données aboutissent en toute sécurité. Par exemple, vous n’avez pas à vous soucier de la taille des données que vous chargez, et si le processus est interrompu, il est sûr de le réessayer sans créer d’erreurs.
country | population | capital | _dlt_load_id | _dlt_id |
USA | 331449281 | Washington, D.C. | 1704276213.296824 | o2LONZyCTCCTFg |
Canada | 38005238 | Ottawa | 1704276213.296824 | ZQneOKiXIUFNbw |
Germany | 83019200 | Berlin | 1704276213.296824 | kuWNeChfE8SVww |
Catalog : country
Table : countries
L’approche déclarative permet donc de simplifier le processus ELT permettant à votre équipe de tirer pleinement parti des données tout en garantissant une gouvernance efficace et une évolutivité optimale. Si vous souhaitez en savoir plus, allez donc voir la documentation!
Ma recommendation
DLT est intéressant car dans le processus d’intégration ELT (Extract Load Transform) : c’est surtout sur l’Extract et le Load qu’il excelle, notamment grâce à ses fonctionnalités de déclarations de sources et destinations.
Pour la partie Transform, je vous suggère d’utiliser DBT l’outil de transformation par excellence, qui en fait le partenaire idéal pour DLT.