DeltaLake performance tuning
Delta Lake est une couche de stockage open source qui fournit des fonctionnalités aux données du data lake qui n’existent que dans les data warehouses. Lorsqu’ils sont combinés avec le stockage en nuage, Databricks et Delta Lake conduisent à la formation d’un Lakehouse.
Un Lakehouse offre simplement le meilleur des deux mondes : les data lakes et data warehouses. Dans le monde d’aujourd’hui, un Lakehouse offre le même ensemble de fonctionnalités qu’un data warehouse traditionnel et à un coût bien inférieur. Cela est rendu possible grâce au stockage cloud tel qu’Azure Data Lake, Spark en tant que moteur de traitement et les données stockées au format Delta Lake.
Pour rendre le traitement de données plus rapide, de diverses optimisations de Delta Lake nous aident à construire un Lakehouse plus performant:
• Utilisation de OPTIMIZE et ZORDER
• Utilisation de l’optimisation automatique AUTO OPTIMIZE
• Mise en cache de delta
• L’application de dynamic partition pruning
• Comprendre bloom filter indexing
1- OPTIMIZE & ZORDER
Delta Lake sur Databricks permet d’accélérer les requêtes en modifiant la disposition des données stockées dans le stockage cloud. Les algorithmes qui prennent en charge cette fonctionnalité sont les suivants :
- Bin-packing : cela utilise la commande OPTIMIZE et aide à fusionner les petits fichiers en plus grands.
- Z-Ordering : Ceci utilise la commande ZORDER et aide à colocaliser les données dans le même ensemble de fichiers. Cette co-localité permet de réduire la quantité de données lues par Spark lors du traitement.
Pour exécuter les commandes OPTIMIZE et ZORDER. La syntaxe pour les deux est la suivante :
- Bin-packing : OPTIMIZE delta.’delta_file_path’ ou OPTIMIZE delta_table. Ici, delta_file_path est l’emplacement du fichier Delta Lake et delta_table est le nom de la table delta.
- Z-Ordering : ZORDER BY (colonnes). Ici, les colonnes indiquent les noms des colonnes sur la base desquelles nous effectuons le Z-Ordering.
Pour exécuter les commandes OPTIMIZE et ZORDER sur la table delta déjà créée, exécutez le bloc de code suivant :
%sql
OPTIMIZE delta_table
ZORDER BY (column1, column2)
2- AUTO OPTIMIZE
L’optimisation automatique est une fonctionnalité qui aide à compacter automatiquement les petits fichiers pendant qu’un individu écrit dans une table delta.
Contrairement au bin-packing, nous n’avons pas besoin d’exécuter une commande à chaque fois que l’optimisation automatique est exécutée. Il se compose de deux composants :
- Optimized Writes : Databricks optimise dynamiquement la taille des partitions Spark pour écrire des blocs de 128 Mo de partitions de table.
- Auto Compaction : Databricks exécute une tâche optimisée lorsque le processus d’écriture des données est terminé et compacte les petits fichiers. Il essaie de fusionner de petits fichiers en fichiers de 128 Mo. Cela fonctionne sur les données qui ont le plus grand nombre de petits fichiers.
Pour activer l’optimisation automatique pour toutes les nouvelles tables, nous devons exécuter les commandes Spark suivant:
spark.config.set("spark.databricks.delta.optimizeWrite.enabled", true)
spark.config.set("spark.databricks.delta.autoCompact.enabled", true)
3- Delta caching
La mise en cache delta est une technique d’optimisation qui permet d’accélérer les requêtes en stockant les données dans le stockage local du nœud de cluster. Le cache delta stocke des copies locales des données qui résident dans des emplacements distants tels qu’Azure Data Lake ou Azure Blob Storage. Il améliore les performances d’un large éventail de requêtes mais ne peut pas stocker les résultats de sous-requêtes arbitraires.
Une fois la mise en cache delta activée, toutes les données extraites d’un emplacement externe sont automatiquement ajoutées au cache. Ce processus ne nécessite aucune action.
Toutes les modifications apportées aux données conservées dans le cache delta sont automatiquement détectées par le cache delta.
Pour que la mise en cache delta soit activée sur le cluster, nous pouvons exécuter ce qui suit commande:
spark.config.set("spark.databricks.io.cache.enabled", true)
4- Dynamic partition pruning
couche de
Dynamic partition pruning est une technique de data-skipping qui peut considérablement accélérer le temps d’exécution des requêtes.
Delta Lake collecte des métadonnées sur les fichiers de partition qu’il gère afin que les données puissent être ignorées sans avoir besoin d’y accéder.
Cette technique est très utile pour les requêtes de type schéma en étoile car elle peut ignorer dynamiquement les partitions et leurs fichiers respectifs.
En utilisant cette technique, nous pouvons élaguer les partitions d’une table de faits lors de la jointure à une table de dimension. Cela est rendu possible lorsque le filtre appliqué à une table de dimension pour élaguer ses partitions est appliqué dynamiquement à la table de faits.
Pour activer cette technique:
spark.config.set("spark.databricks.optimizer.dynamicPartitionPruning", true)
5- Bloom filter indexing
Bloom filter index est une structure de données qui permet de le data skipping sur des colonnes, en particulier sur des champs contenant du texte arbitraire.
Le filtre fonctionne soit en déclarant que certaines données ne sont définitivement pas dans un fichier, soit qu’elles se trouvent probablement dans le fichier, ce qui est défini par une probabilité de faux positifs (FPP).
L’indice de filtre de bloom peut aider à accélérer l’aiguille dans un type de requêtes qui ne sont pas accélérées par d’autres techniques.
On commence par vérifier la configuration de Spark pour les index de filtre bloom, Par défaut, c’est activé.
spark.config.get("spark.databricks.io.skipping.bloomFilter.enabled")
Ensuite, nous allons créer l’index du filtre bloom en utilisant le bloc de code suivant.
%sql
CREATE BLOOMFILTER INDEX
ON TABLE delta_table
FOR COLUMNS(column1 OPTIONS (fpp=0.1, numItems=1000000))
Tag:Cloud, Databricks, DeltaLake, Spark, Tuning