Migrer un data lake Parquet vers Delta Lake
Cet article fournit des recommandations pour convertir un data lake Parquet existant en Delta Lake. Delta Lake est le format sous-jacent dans le lakehouse Databricks. Consultez Qu'est-ce que Delta Lake dans Databricks ?.
Considérations avant de convertir vers Delta Lake
Votre data lake Parquet dispose probablement d'une stratégie de partitionnement qui a été optimisée pour vos charges de travail et systèmes existants. Bien que vous puissiez convertir vers Delta Lake et maintenir cette structure de partitionnement, les tables sur-partitionnées sont l'une des principales causes qui entraînent des charges de travail lentes sur Delta Lake. Consultez Quand partitionner les tables sur Databricks et les directives pour adapter le code Spark à Databricks.
Vous devez également déterminer si les données converties sont toujours en augmentation, ainsi que la fréquence actuelle des requêtes de données. Vous pouvez choisir différentes approches pour différentes tables Parquet dans votre data lake.
Approches de conversion de Delta Lake
La matrice suivante décrit les quatre approches principales pour convertir un data lake Parquet en Delta Lake et certains des compromis. Pour clarifier chaque colonne :
- Incrémentiel : Désigne une fonctionnalité qui prend en charge la conversion de données supplémentaires ajoutées à la source de conversion après le début de la conversion.
- Données en double : indique si les données sont écrites dans un nouvel emplacement ou modifiées sur place.
- Maintient la structure des données : indique si la stratégie de partitionnement est maintenue pendant la conversion.
- Remplissage rétroactif des données : Désigne la fonctionnalité qui prend en charge le remplissage rétroactif des données qui ont été ajoutées à la source de conversion après le début de la conversion.
- Facilité d'utilisation : Indique le niveau d'effort de l'utilisateur pour configurer et exécuter la conversion des données.
Méthode | Incrémentiel | Données dupliquées | Maintient la structure des données | Données de remplissage | Simplicité d'utilisation |
|---|---|---|---|---|---|
Profond | Oui | Oui | Oui | Oui | Facile |
Superficiel | Oui | Non | Oui | Oui | Facile |
| Non | Non | Oui | Non | Facile |
Auto Loader | Oui | Oui | Non | Facultatif | Certaines configurations |
Job Spark en batch | Logique personnalisée | Oui | Non | Logique personnalisée | Logique personnalisée |
Les sections suivantes discutent de chacune de ces options plus en détail.
Migrez les données Parquet avec CLONE Parquet
Vous pouvez utiliser CLONE Parquet pour copier des données de manière incrémentielle d'un data lake Parquet vers Delta Lake. Les clones superficiels créent des pointeurs vers des fichiers Parquet existants, en conservant votre table Parquet à son emplacement et dans son format d'origine, tout en offrant un accès optimisé grâce aux statistiques de fichiers collectées. Vous pouvez écrire dans la table créée par un clone superficiel sans affecter la source de données d'origine.
Le clonage profond copie tous les fichiers de données de la source vers un nouvel emplacement tout en les convertissant en Delta Lake. Le clonage profond vous permet de détecter de manière incrémentielle de nouveaux fichiers, y compris les opérations de rattrapage, lors de l'exécution ultérieure de la logique. Voir Cloner de manière incrémentielle des tables Parquet et Apache Iceberg vers Delta Lake.
L'exemple suivant illustre l'utilisation de CLONE:
CREATE OR REPLACE TABLE <target-table-name> [SHALLOW] CLONE parquet.`/path/to/data`;
Migrer les données Parquet avec CONVERT TO DELTA
Vous pouvez utiliser CONVERT TO DELTA pour transformer un répertoire de fichiers Parquet en table Delta avec une seule commande. Une fois que vous avez converti une table en Delta Lake, vous devez cesser de lire et d'écrire à partir de la table à l'aide de la logique Parquet. Les données écrites dans le répertoire cible après le start de la conversion pourraient ne pas être prises en compte dans la table Delta résultante. Voir Convertir en Delta Lake.
L'exemple suivant démontre l'utilisation de CONVERT TO DELTA:
CONVERT TO DELTA parquet.`s3://my-bucket/parquet-data`;
Migrer les données Parquet avec Auto Loader
Bien que Auto Loader soit un produit conçu pour l'ingestion incrémentielle de données à partir du stockage d'objets cloud, vous pouvez l'utiliser pour implémenter un modèle qui copie incrémentiellement toutes les données d'un répertoire donné vers une table cible. Consultez Qu'est-ce qu'Auto Loader ?.
L'exemple de code suivant comprend des configurations qui :
- Traitez tous les fichiers existants dans le répertoire source.
- Trigger un job de remplissage hebdomadaire automatique pour capturer les fichiers qui pourraient avoir été manqués.
- Autorisez Apache Spark à utiliser plusieurs jobs Spark pour éviter les erreurs de spill et de mémoire insuffisante associées aux grandes partitions de données.
- Fournir des garanties de traitement de bout en bout et exactement une fois.
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "parquet")
.option("cloudFiles.includeExistingFiles", "true")
.option("cloudFiles.backfillInterval", "1 week")
.option("cloudFiles.schemaLocation", checkpoint_path)
.load(file_path)
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable(table_name)
)
Vous pouvez utiliser Auto Loader dans les LakeFlow Pipelines avec Python ou SQL :
Migrer les données Parquet avec une logique de batch Apache Spark personnalisée
L'écriture d'une logique Apache Spark personnalisée offre une grande flexibilité pour contrôler comment et quand les différentes données de votre système source sont migrées, mais cela pourrait nécessiter une configuration étendue pour offrir des capacités intégrées à d'autres approches.
Au cœur de cette approche se trouve une simple Opération de lecture et d'écriture Apache Spark, comme celle-ci :
spark.read.format("parquet").load(file_path).write.mode("append").saveAsTable(table_name)
Pour effectuer des remplissages rétrospectifs ou une migration incrémentielle, vous pourriez vous fier à la structure de partitionnement de votre source de données, mais vous pourriez également avoir besoin d'écrire une logique personnalisée pour suivre les fichiers ajoutés depuis le dernier chargement de données à partir de la source. Bien que vous puissiez utiliser les capacités de merge de Delta Lake pour éviter l'écriture de doublons, la comparaison de tous les enregistrements d'une grande table source Parquet avec le contenu d'une grande table Delta est une tâche coûteuse en termes de calculs.
Quand ne devriez-vous pas convertir vers Delta Lake ?
Avant de convertir toutes vos données Parquet existantes en Delta Lake, vous êtes susceptible de considérer les compromis potentiels.
Databricks conçoit de nombreuses fonctionnalités optimisées du lakehouse autour de Delta Lake, et Delta Lake offre un riche écosystème open source avec des connecteurs natifs pour de nombreux langages et systèmes de données d'entreprise. OpenSharing étend la capacité de partager des données stockées avec Delta Lake à d'autres clients.
Delta Lake est construit au-dessus de Parquet et, à ce titre, Databricks dispose également de lecteurs et d'écrivains optimisés pour interagir avec des fichiers Parquet.
Databricks recommande d'utiliser Delta Lake pour toutes les tables qui reçoivent des mises à jour ou des queries régulières de Databricks. Vous pouvez choisir de conserver les données au format Parquet dans certains cas, comme les suivants :
- Un système en amont qui écrit des données au format Parquet ne prend pas en charge l'écriture native dans Delta Lake.
- Un système en aval qui lit les données Parquet ne peut pas lire Delta Lake.
Dans ces deux cas, vous pourriez vouloir répliquer vos tables dans Delta Lake pour bénéficier des avantages en termes de performances lors de la lecture, de l'écriture, de la mise à jour et de la suppression d'enregistrements dans la table.
Il n'est pas recommandé de modifier simultanément les données dans la même table Delta stockée dans S3 à partir de plusieurs Workspace ou systèmes de données. Consultez les limites de Delta Lake sur S3.