Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le partitionnement de style Hive divise une table Delta en sous-répertoires physiques en fonction des valeurs d’une ou plusieurs colonnes de partition. Chaque combinaison unique de valeurs de colonne de partition crée un répertoire distinct. Cette structure permet l’élagage des partitions : le moteur ignore des répertoires entiers lorsqu’une requête filtre sur la colonne de partition.
Tip
Pour la plupart des charges de travail à partir de la version 2.0 de Fabric Runtime, le clustering liquide est la stratégie de disposition des données recommandée pour les performances de lecture. La principale raison d’utiliser le partitionnement consiste à activer les opérations d’écriture simultanées qui ne sont pas en conflit.
Pour des informations complètes sur le liquid clustering, consultez Liquid clustering.
Quand utiliser le partitionnement
Le cas d’usage principal pour le partitionnement dans Delta Lake permet d’effectuer des opérations d’écriture simultanées qui ne sont pas en conflit. Delta Lake utilise un contrôle d’accès concurrentiel optimiste, et deux opérations qui touchent les mêmes fichiers peuvent entrer en conflit. Le partitionnement permet aux opérations simultanées de cibler des ensembles de fichiers disjoints en fonctionnant sur des partitions distinctes.
Utilisez le partitionnement quand :
- Vous avez des processus d’écriture concurrents qui doivent mettre à jour, supprimer ou fusionner des données dans la même table sans entrer en conflit, par exemple plusieurs pipelines qui traitent simultanément différentes unités commerciales ou régions.
- Votre colonne de partition a une cardinalité faible à modérée (des dizaines à des centaines de valeurs distinctes, et non des milliers). Remarque : les tables plus volumineuses peuvent prendre en charge davantage de partitions. Ciblez au moins 1 Go de données dans chaque partition.
- Les valeurs de partition s’alignent sur vos modèles d’écriture : chaque enregistreur cible naturellement une partition spécifique.
Important
Pour l’évitement de fichiers et les performances de lecture à eux seuls, le clustering liquide est plus efficace que le partitionnement. Le clustering liquide élimine le risque de problèmes de petits fichiers liés à des colonnes de partition à forte cardinalité et vous permet de modifier la stratégie de clustering tout au long du cycle de vie de la table. Choisissez le partitionnement principalement lorsque vous devez isoler des processus d’écriture concurrents.
Créer une table partitionnée
CREATE TABLE sales.orders (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
)
USING DELTA
PARTITIONED BY (region)
Partitionnement et écritures simultanées
Le partitionnement est le mécanisme principal dans Delta Lake pour éviter les conflits entre les opérations d’écriture simultanées. Lorsqu’une table est partitionnée, les opérations qui ciblent différentes partitions fonctionnent sur des ensembles disjoints de fichiers et ne sont pas en conflit entre elles.
Par exemple, deux opérations simultanées MERGE INTO sur une table partitionnée region par n’entrent pas en conflit tant que chaque région cible une région différente, à condition que la colonne de partition soit explicitement incluse dans la condition de fusion :
-- Pipeline A: processes North America only
MERGE INTO sales.orders AS target
USING staged_orders AS source
ON target.order_id = source.order_id
AND target.region = 'NA'
AND source.region = 'NA'
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
Sans partitionnement ou sans inclure la colonne de partition dans la condition d’opération, ces mêmes opérations peuvent entrer en conflit même si elles modifient logiquement différentes lignes. La colonne de partition doit apparaître dans la condition de fusion elle-même, pas seulement dans les données sources. Sans cela, Delta Lake ne peut pas déterminer au moment de la validation que les deux opérations touchaient des jeux de fichiers disjoints.
Pour un guide complet des types de conflits et des stratégies de résolution, consultez le contrôle de la concurrence.
Pièges courants
- Les colonnes de partition de cardinalité élevée (par exemple,
user_idavec des millions de valeurs) créent des milliers de petits répertoires et fichiers, qui dégradent les performances d’écriture et de lecture.- Les colonnes de date doivent être choisies avec précaution. Pour de nombreuses tables, le partitionnement par colonne de date entraîne un trop grand nombre de petites partitions. Ciblez au moins 1 Go de données dans chaque partition.
- Les colonnes de partition ne peuvent pas être modifiées après la création de la table sans réécriture de la table entière.
- Le problème de petit fichier est courant avec la diffusion en continu ou les ajouts fréquents dans de nombreuses partitions, car chaque écriture crée au moins un fichier par partition.
- Le partitionnement et le clustering liquide sont incompatibles sur la même table. Vous devez choisir une stratégie.
Comparer le partitionnement et le clustering liquide
| Aspect | Partitionnement de style Hive | Regroupement de liquide |
|---|---|---|
| Idéal pour | Isolation simultanée de l’enregistreur | Ignorance générique des fichiers et optimisation de la lecture |
| Granularité | Un répertoire par valeur distincte (ou combinaison) | Plages de valeurs au niveau du fichier, aucun répertoire |
| Cardinalité élevée | Crée des milliers de petits fichiers/répertoires | Gère cela naturellement ; répartit les données dans des fichiers de taille adaptée |
| Modifications des colonnes | Nécessite une réécriture complète de table |
ALTER TABLE CLUSTER BY s’applique à la prochaine OPTIMIZE |
| Chemin d’écriture | La colonne de partition doit être connue au moment de l’écriture | N’importe quelle colonne peut être clusterisée a posteriori. |
| Écritures simultanées | Les partitions disjointes évitent les conflits | Ajout uniquement sans conflits ; les mises à jour/suppressions/fusions peuvent entrer en conflit sur les tables nonpartitionées |
| Problème de petit fichier | Fréquents avec la diffusion en continu ou les insertions fréquentes | Géré par OPTIMIZE compactage |