Découverte de partitions pour les tables externes
Cet article décrit la stratégie de découverte de partitions par défaut pour les tables externes Unity Catalog, ainsi qu’un paramètre facultatif permettant d’activer le journal des métadonnées de partition de sorte à rendre la découverte de partitions cohérente avec le metastore Hive.
Databricks recommande d’activer la journalisation des métadonnées de partition pour améliorer les vitesses de lecture et les performances de requête pour les tables externes Unity Catalog avec partitions.
Quelle est la stratégie de découverte de partitions par défaut pour Unity Catalog ?
Par défaut, Unity Catalog répertorie de façon récursive tous les répertoires de l’emplacement de la table afin de détecter automatiquement les partitions. Pour les tables volumineuses avec de nombreux répertoires de partition, l’opération peut accroître la latence de nombreuses opérations de table.
Utiliser la journalisation des métadonnées de partition
Important
Cette fonctionnalité est disponible en préversion publique.
Dans Databricks Runtime versions 13.3 LTS et ultérieures, vous pouvez activer la journalisation des métadonnées de partition, qui est une stratégie de découverte de partitions pour les tables externes inscrites dans Unity Catalog. Ce comportement est cohérent avec la stratégie de découverte de partitions utilisée dans le metastore Hive. Ce comportement affecte uniquement les tables externes Unity Catalog qui ont des partitions et utilisent Parquet, ORC, CSV ou JSON. Databricks recommande d’activer ce nouveau comportement pour améliorer les vitesses de lecture et les performances de requête de ces tables.
Important
Les tables pour lesquelles la journalisation des métadonnées de partition est activée enregistrent une modification du comportement de découverte de partitions. Au lieu d’analyser automatiquement l’emplacement de la table à la recherche de partitions, Unity Catalog respecte uniquement les partitions inscrites dans les métadonnées de partition. Consultez Ajouter, supprimer ou réparer manuellement des métadonnées de partition.
Ce comportement sera défini par défaut dans une future version de Databricks Runtime. Les tables pour lesquelles le mappage de colonnes est activé ne peuvent être lues que dans Databricks Runtime versions 13.3 LTS et ultérieures.
Remarque
Essayez d’interroger une table avec Databricks Runtime version 12.2 LTS ou antérieure pour confirmer qu’elle n’utilise pas le nouveau comportement du journal de partition.
Activer la journalisation des métadonnées de partition
Pour activer la journalisation des métadonnées de partition sur une table, vous devez activer une configuration Spark pour l’actuelle SparkSession, puis créer une table externe. Ce paramètre est obligatoire uniquement dans la SparkSession qui crée la table. Une fois que vous avez créé une table et activé la journalisation des métadonnées de partition, celle-ci conserve ce paramètre en tant que métadonnées de la table et utilise la fonctionnalité pour toutes les charges de travail ultérieures.
La syntaxe suivante représente l’utilisation de SQL pour définir une configuration Spark dans un bloc-notes. Vous pouvez également définir une configuration Spark lorsque vous configurez le calcul.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Important
Vous pouvez uniquement lire et écrire des tables dont la journalisation des métadonnées de partition est activée dans Databricks Runtime versions 13.3 LTS et ultérieures. Si vous disposez de charges de travail qui s’exécutent sur Databricks Runtime version 12.2 LTS ou antérieure qui doivent interagir avec les tables, n’utilisez pas ce paramètre.
La suppression des tables externes n’efface pas les fichiers de données sous-jacents. Databricks recommande d’utiliser la syntaxe CREATE OR REPLACE
pour mettre à niveau des tables en vue d’utiliser la journalisation des métadonnées de partition, comme dans l’exemple suivant :
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Unity Catalog applique des règles de chevauchement des chemins d’accès pour les tables et les volumes. Vous ne pouvez pas inscrire de nouvelle table Unity Catalog sur une collection de fichiers de données si une table existe déjà à cet emplacement.
Exploiter des tables comportant des métadonnées de partition
Databricks recommande d’utiliser des noms de tables pour l’ensemble des lectures et écritures de toutes les tables inscrites dans Unity Catalog. Avec les tables comportant des métadonnées de partition, cela garantit que les nouvelles partitions ajoutées à un registre de tables dans Unity Catalog et les requêtes de table lisent toutes les partitions inscrites.
Si vous utilisez des modèles basés sur des chemins pour la lecture ou l’écriture, les partitions peuvent être ignorées ou non inscrites dans le metastore Unity Catalog. Voir Limitations.
Lister les partitions
Utilisez la commande suivante pour afficher toutes les partitions inscrites dans Unity Catalog en tant que métadonnées de partition :
SHOW PARTITIONS <table-name>
Pour vérifier si une partition isolée est inscrite dans Unity Catalog, utilisez la commande suivante :
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Ajouter, supprimer ou réparer manuellement des métadonnées de partition
Unity Catalog exige que toutes les partitions des tables externes soient contenues dans le répertoire inscrit avec la clause LOCATION
lors de l’inscription de table.
Une fois les métadonnées de partition activées, la découverte automatique des partitions dans l’emplacement de la table est désactivée. Si les systèmes externes écrivent des données sur l’emplacement de la table ou que vous utilisez des écritures basées sur le chemin pour ajouter ou remplacer des enregistrements dans votre table, vous devez réparer manuellement les métadonnées de partition.
Azure Databricks utilise un partitionnement de style Hive pour stocker les tables sauvegardées par Parquet, ORC, CSV et JSON. Les partitions de style Hive contiennent des paires clé-valeur connectées par signe égal dans le répertoire de partition, par exemple year=2021/month=01/
.
Si votre table utilise un partitionnement de style Hive, vous pouvez utiliser MSCK REPAIR
pour synchroniser les métadonnées de partition dans Unity Catalog avec des partitions qui se trouvent dans l’emplacement de la table. La syntaxe suivante représente des opérations courantes :
-- Add and remove parition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Consultez REPAIR TABLE.
Spécifier manuellement des chemins pour les autres types de partitions
Si votre table n’utilise pas un partitionnement de style Hive, vous devez spécifier manuellement les emplacements de partition lorsque vous ajoutez des partitions. Par rapport à la syntaxe MSCK REPAIR
, la spécification manuelle de partitions peut également réduire la latence, en particulier pour les tables comportant de nombreuses partitions. La syntaxe suivante représente l’ajout d’une partition :
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Vous pouvez également utiliser la syntaxe ALTER TABLE
pour supprimer, renommer, récupérer et définir l’emplacement des partitions. Consultez ALTER TABLE … PARTITION.
Désactiver les métadonnées d’une nouvelle partition
La configuration Spark qui contrôle si les nouvelles tables utilisent les métadonnées de partition est désactivée par défaut. Vous pouvez aussi désactiver ce comportement de façon explicite. La syntaxe suivante utilise SQL pour désactiver la configuration Spark :
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Cela détermine uniquement si les tables créées dans la SparkSession utilisent les métadonnées de partition. Pour désactiver les métadonnées de partition sur une table qui utilise ce comportement, vous devez supprimer et recréer la table dans une SparkSession pour laquelle la configuration Spark n’est pas activée.
Remarque
Même si vous ne pouvez pas lire ni écrire de tables dont les métadonnées de partition sont activées dans Databricks Runtime version 12.2 LTS ou antérieure, vous pouvez exécuter des instructions DROP
ou CREATE OR REPLACE TABLE
sur ces tables si vous disposez de privilèges suffisants dans Unity Catalog.
Limites
Les limites suivantes existent :
- Vous ne pouvez pas lire ni écrire de tables dont les métadonnées de partition sont activées dans Databricks Runtime version 12.2 LTS ou antérieure.
- La lecture d’une table avec le chemin du répertoire retourne toutes les partitions, y compris celles qui ont été ajoutées ou supprimées manuellement.
- Si vous insérez ou remplacez des enregistrements dans une table avec un chemin plutôt qu’un nom de table, les métadonnées de partition ne sont pas enregistrées.
- Le format de fichier Avro n’est pas pris en charge.