Databricks Delta Live Tables a été finalement lancé !
Ça y est ! Delta Live Tables (DLT) est sorti en avril 2022, et non, ce n’est pas une nouvelle version des Delta Tables, c’est l’outil ETL de Databricks.
DLT est un framework ETL qui permet de construire des pipelines de données grâce à sa méthode déclarative. Je m’explique, le flux se crée à travers des transformations de données stockées dans des tables (ou vues) et ces tables peuvent être liées entre elles (une table en alimentant une autre). DLT comprend ces dépendances et automatise toutes les complexités opérationnelles pour construire le pipeline.
TL;DR
Delta Live Tables (DLT) est un framework qui propulse le fonctionnement de Spark et Delta Lake en ajoutant des fonctionnalités complémentaires qui lui permettent de devenir un outil ETL de A à Z.
Parmi les fonctionnalités DLT, nous retrouvons :
- Infrastructure automatisée grâce à l’automatisation de l’orchestration, auto-scalabilité et monitoring.
- Un même pipeline peut être utilisé pour les données en Batch et en Streaming.
- DLT permet d’appliquer des règles de qualité de données comme CONSTRAINT ou DROP ON grâce aux “Expectations”.
- DLT permet d’ajouter du CDC à l’intérieur de Databricks.
- La facturation se fait par pipeline et elle est basée sur les fonctions utilisées dans celui-ci et non globalement.
- DLT a une configuration à la volée : il est possible de changer la configuration d’un pipeline sans avoir besoin de redéployer.
Architecture
Delta Live Tables s’appuie sur Delta Lake pour le stockage des données et d’Apache Spark pour les transformations. Ici une image des fonctionnalités ajoutées à Databricks :
Parmi les fonctionnalités les plus intéressantes, nous trouvons :
- Plus besoin de gérer l’infrastructure. DLT enlève ce poids de tes épaules en automatisant la scalabilité du cluster, la capacité de relancer si le pipeline tombe, l’ajout du CI/CD et du testing, entre autres.
- Plus besoin de Java ou Scala, nous pouvons nous concentrer uniquement sur le langage que nous adorons tous/tes : SQL. N’importe qui peut donc créer un pipeline de données. Python reste toutefois aussi une alternative pour les aventuriers.
- Plus besoin de différencier le batch du streaming. Les transformations fonctionnent aussi bien dans un cas que dans l’autre.
- DLT gère la qualité des données grâce aux “Expectations”. Cela permet d’appliquer des règles de gestion pour filtrer les données invalides à travers le flux puis de tracer la qualité de données dans le temps. Attention : cette fonctionnalité n’est disponible qu’avec la licence Advanced.
- DLT permet de faire la récupération CDC grâce à laquelle il est possible d’écouter des tables créées dans Databricks. Attention : cette fonctionnalité n’est disponible qu’avec la licence Pro.
Ok, ok, ok mais comment ça marche ?
Création d’un pipeline
La création d’un pipeline se base sur un notebook Spark typique mais qui applique le framework dlt. Ce notebook est paramétré en fonction de son exécution (batch ou streaming) et est facturé en fonction des fonctionnalités qui y sont utilisées (que je détaille plus bas dans la partie Tarif).
Voici un exemple d’un pipeline :
- Les données sont récupérées depuis le delta lake et stockées dans la “Live Table” : raw_data
- Ensuite, les données de raw_data sont récupérées, transformées et les règles de qualité de données sont appliquées. Le résultat est stocké dans la Live Table : clean_data
- Finalement, un modèle de machine learning est appliqué aux données de la table clean_data. Le résultat est stocké dans la Live table : scored_records. Note bien que sur cette dernière cellule la transformation est faite avec Python et non SQL. DLT donne la liberté au développeur/se de choisir le langage qui lui convient.
Grâce aux dépendances entre les tables, DLT génère automatiquement un graphe visuel qui facilite le suivi de l’exécution du flux (je détaille cette fonctionnalité dans la partie Détails).
Expectations
Il est possible d’ajouter des règles de gestion de données au pipeline en ajoutant des “Expectations”. L’Expectation permet de gérer la réaction de la Live Table à une ligne invalide à travers les différentes méthodes de réaction : notification, suppression ou génération d’une erreur.
Exemples :
- Ne laisser passer les lignes qu’à partir d’une date sur Python :
@dlt.expect("valid timestamp", "col(“timestamp”) > '2012-01-01'")
- Mettre un terme au pipeline si inexistence de lignes sur SQL :
CONSTRAINT valid_count EXPECT (count > 0) ON VIOLATION FAIL UPDATE
- Supprimer les lignes invalides sur SQL :
CONSTRAINT valid_current_page EXPECT (current_page_id IS NOT NULL and current_page_title IS NOT NULL) ON VIOLATION DROP ROW
Il est possible d’ajouter plusieurs Expectations aussi.
Détails
Graphe du flux
Une fois lancé, le pipeline affiche un graphe du DAG créé. Cela nous permet de voir nos Lives Tables et leurs dépendances au travers d’une interface graphique et interactive. Celle-ci indique le temps d’exécution, les lignes qui sont passées et celles rejetées par la règle de contrôle de qualité de données.
Dataset
Si on clique sur un des nœuds, DLT nous affiche leur détail. Parmi les informations importantes se trouvent le chemin du Delta Lake où les données sont stockées, le schéma du dataset et la qualité de la donnée sur cette étape.
Changement de la configuration à la volée
Il suffit seulement d’ouvrir les paramètres du pipeline, modifier la valeur souhaitée et de cliquer sur Save pour changer la configuration d’un pipeline. Pas besoin de rédéployer ou d’indiquer la configuration dans un fichier externe, et c’est appréciable ! 🙂
Parmi les valeurs qui peuvent être modifiées :
- Le stockage où s’appuie DLT pour ses transformations
- Le notebook à utiliser (un pipeline peut contenir un ou plusieurs notebooks)
- La Live Table cible
- Son mode d’exécution : batch (appelé Triggered) ou streaming (appelé Continuous). Plus d’info sur mon article de développement DLT.
Tarif
Les tarifs DLT sont basés sur les fonctionnalités utilisées dans les pipelines. Cela signifie qu’il est facturé au temps de calcul de chaque exécution de pipeline et non pour le service global.
Ci-dessous je te laisse le tableau des fonctionnalités pour chaque édition : Core, Pro et Advanced; et ses tarifs par DBU.
On ne peut pas parler d’analyse de données sans parler d’abord des règles de gestion des données, et d’après mon expérience en tant que Data Engineer, je n’ai jamais vu un flux où cela ne s’applique pas, du moins dans les flux principaux. Pour cette raison, je recommande l’utilisation de cette dernière édition (Advanced). L’approche “par pipeline” de DLT nous permet de payer uniquement lorsque nous utilisons ses fonctionnalités.
Points clés à retenir
Delta Live Tables :
- Accélère le développement ETL grâce à sa méthode déclarative en SQL ou Python et son application des best practices des flux data.
- Gère toute la partie infrastructure en automatisant les tâches d’installation, configuration, orchestration, auto-scalabilité, monitoring des flux et des environnements.
- Assure la qualité de données grâce aux contrôles et tests que nous pouvons ajouter au pipeline pour le nettoyage des données.
- Agnostique au batch et streaming : DLT nous permet de construire un pipeline capable de transformer les données à la fois par Batch et en Streaming sans avoir besoin de modifier une ligne de code.
Grâce à DLT les équipes qui utilisent Databricks n’ont plus besoin de faire leurs flux de données hors de la plateforme Databricks, et peuvent dès à présent profiter de la toute la nouvelle approche Modern Cloud Data Platform.
DLT est disponible sur Azure, AWS et bientôt sur GCP.
Mais… c’est de la magie ? Mmm, oui si tu veux, mais en 2022 on ne dit plus “magie”, on dit Low-code No-code. 😉
N’hésites pas laisser un commentaire où à nous contacter pour toutes questions ou info complémentaires 🙂
Allez bonne journ/soir->ée !