Lire les tables Delta Lake avec les clients Iceberg à l'aide d'UniForm
Disponibles dans Databricks Runtime 14.3 LTS et versions ultérieures, les lectures Iceberg vous permettent de configurer les tables Delta Lake pour générer automatiquement des métadonnées Iceberg, permettant aux clients Iceberg de lire les données Delta Lake sans réécrire les fichiers.
Vous pouvez configurer une connexion externe pour que Unity Catalog agisse comme un catalogue Iceberg. Consultez l'accès aux tables Databricks à partir de clients Apache Iceberg.
Fonctionnement des lectures Iceberg
Delta Lake et Apache Iceberg se composent de fichiers de données Parquet et d'une couche de métadonnées. L'activation des lectures Iceberg configure vos tables Delta Lake pour générer automatiquement les métadonnées Iceberg de manière asynchrone, sans réécrire les données, permettant ainsi aux clients Iceberg de les lire. Une seule copie des fichiers de données prend en charge plusieurs formats.
Lorsque vous utilisez des lectures Iceberg, tenez compte des éléments suivants :
- Les tables Delta Lake avec lecture Iceberg activée utilisent Zstandard au lieu de Snappy comme codec de compression pour les fichiers de données Parquet sous-jacents.
- La génération de métadonnées Iceberg s'exécute de manière asynchrone sur le compute utilisé pour écrire des données dans les tables Delta Lake, ce qui pourrait augmenter l'utilisation des ressources du Driver.
Pour la documentation sur la fonctionnalité de table IcebergCompatV1 UniForm héritée, consultez Legacy UniForm IcebergCompatV1.
Exigences
Pour activer les lectures Iceberg, les exigences suivantes doivent être remplies :
-
La table Delta Lake doit être enregistrée dans Unity Catalog. Les tables gérées et externes sont toutes deux prises en charge.
-
La table doit avoir le mappage des colonnes activé. Consultez Renommer et supprimer des colonnes avec le mappage de colonnes Delta Lake.
- Une fois que
IcebergCompatV2est activé pour une table, vous ne pouvez pas supprimer la fonctionnalité de tablecolumnMapping.
- Une fois que
-
La table Delta Lake doit avoir un
minReaderVersion>= 2 etminWriterVersion>= 7. Consultez la compatibilité des fonctionnalités et protocoles Delta Lake. -
Les écritures dans la table doivent utiliser Databricks Runtime 14,3 LTS ou une version supérieure.
Vous ne pouvez pas activer les vecteurs de suppression sur une table avec des lectures Iceberg activées.
Utilisez REORG pour désactiver et purger les vecteurs de suppression tout en activant les lectures Iceberg sur une table existante avec les vecteurs de suppression activés. Consultez Activer ou mettre à niveau la prise en charge de la lecture Iceberg à l'aide de REORG.
Activer les lectures Iceberg (UniForm)
L'activation des lectures Iceberg ajoute la fonctionnalité de protocole d'écriture IcebergCompatV2 et met à niveau le protocole d'écriture. Seuls les clients qui prennent en charge cette fonctionnalité de table peuvent écrire dans la table. Cela pourrait affecter la compatibilité avec les clients externes Delta Lake. Consultez la compatibilité des fonctionnalités et les protocoles de Delta Lake.
Lorsque vous activez pour la première fois les lectures Iceberg, la génération asynchrone des métadonnées commence. Cette tâche doit être terminée avant que les clients externes ne puissent interroger la table à l'aide d'Iceberg. Consultez Vérifier l'état de génération des métadonnées Iceberg.
Pour une liste des limitations, consultez Limitations.
Lors de la création de table
Le mappage de colonnes est activé automatiquement lorsque vous activez les lectures Iceberg pendant la création de la table :
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'id',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Databricks vous recommande de définir delta.columnMapping.mode = id à des fins de compatibilité. Voir Renommer et supprimer des colonnes avec le mappage de colonnes Delta Lake.
Sur une table existante
Pour activer les lectures Iceberg sur une table existante sur Databricks Runtime 15.4 LTS ou une version ultérieure :
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Pour plus de détails sur le mode de mappage de colonnes name, consultez Modes de mappage de colonnes.
Activer ou mettre à niveau la prise en charge de la lecture Iceberg à l'aide de REORG
Utilisez REORG pour activer les lectures Iceberg si l'une des conditions suivantes est remplie :
- Vous avez activé les vecteurs de suppression sur votre table.
- Vous avez précédemment activé la version
IcebergCompatV1de UniForm Iceberg. - Vous devez lire à partir de moteurs Iceberg qui ne prennent pas en charge les fichiers Parquet de style Hive, tels qu'Athena ou Redshift.
Pour activer la lecture Iceberg et réécrire les fichiers de données sous-jacents, utilisez REORG comme l'exemple suivant :
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Vérifiez que les lectures Iceberg sont activées
Utilisez DESCRIBE EXTENDED pour vérifier que les lectures Iceberg (UniForm) sont activées pour votre table :
DESCRIBE EXTENDED catalog_name.schema_name.table_name;
Recherchez la section Delta Uniform Iceberg dans la sortie. Si cette section est présente, les lectures Iceberg sont activées sur votre table.
Alternativement, vous pouvez utiliser SHOW TBLPROPERTIES:
SHOW TBLPROPERTIES catalog_name.schema_name.table_name;
Vérifiez les propriétés suivantes :
delta.enableIcebergCompatV2 = truedelta.universalFormat.enabledFormats = iceberg
Si les deux propriétés sont présentes avec ces valeurs, les lectures Iceberg sont activées.
Désactiver la lecture Iceberg
Vous pouvez désactiver les lectures Iceberg en désactivant la propriété de table delta.universalFormat.enabledFormats :
ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');
Les mises à niveau des versions de protocole de lecteur et d'écriture de Delta Lake sont irréversibles. Consultez la compatibilité des fonctionnalités et protocoles Delta Lake.
Génération de métadonnées Iceberg
Databricks déclenche la génération de métadonnées de manière asynchrone une fois qu'une transaction d'écriture Delta Lake est terminée. Ce processus de génération de métadonnées utilise le même compute qui a terminé la transaction Delta Lake.
Vous pouvez également Trigger manuellement la génération des métadonnées Iceberg. Voir Manually Trigger la conversion des métadonnées Iceberg.
Pour éviter les latences d'écriture associées à la génération de métadonnées, les tables Delta Lake avec des commits fréquents peuvent regrouper plusieurs commits Delta Lake en un seul commit pour les métadonnées Iceberg.
Delta Lake garantit qu'un seul processus de génération de métadonnées est en cours sur une ressource de compute donnée. Les commits qui trigger un deuxième processus de génération de métadonnées concurrent sont commits avec succès dans Delta Lake, mais ne trigger pas la génération asynchrone de métadonnées Iceberg. Ceci empêche la latence en cascade pour la génération de métadonnées pour les charges de travail avec des commits fréquents (secondes à minutes entre les commits).
Consultez les versions des tables Delta et Iceberg.
Versions des tables Delta et Iceberg
Delta Lake et Iceberg permettent des queries de time travel en utilisant les versions de table ou les Timestamps stockés dans les métadonnées de la table.
Les versions de table Delta Lake ne sont pas garanties d’être alignées sur les versions Iceberg, ni par le commit timestamp ni par l’ID de version. Pour vérifier à quelle version d’une table Delta Lake correspond une version donnée d’une table Iceberg, utilisez les propriétés de table correspondantes. Consultez Vérifier l'état de génération des métadonnées Iceberg.
Vérifier le statut de la génération des métadonnées Iceberg
L'activation des lectures Iceberg sur une table ajoute les champs suivants aux métadonnées de la table Unity Catalog et Iceberg pour suivre l'état de la génération des métadonnées :
Champ de métadonnées | Description |
|---|---|
| La dernière version de la table Delta Lake pour laquelle les métadonnées Iceberg ont été générées avec succès. |
| Le Timestamp du dernier commit Delta Lake pour lequel les métadonnées Iceberg ont été générées avec succès. |
Sur Databricks, vous pouvez examiner ces champs de métadonnées en effectuant l'une des opérations suivantes :
- Examen de la section
Delta Uniform Icebergrenvoyée parDESCRIBE EXTENDED table_name. - Examen des métadonnées de la table avec Catalog Explorer.
Consultez la documentation de votre client de lecture Iceberg pour savoir comment examiner les propriétés de table en dehors de Databricks. Pour Apache Spark OSS, vous pouvez voir ces propriétés à l'aide de la syntaxe suivante :
SHOW TBLPROPERTIES <table-name>;
Manually Trigger Iceberg metadata conversion
Vous pouvez manuellement Trigger la génération des métadonnées Iceberg pour la dernière version de la table Delta Lake. Cette opération s'exécute de manière synchrone. Une fois terminé, le contenu de la table disponible dans Iceberg reflète la dernière version de la table Delta Lake disponible lorsque le processus de conversion a start.
Cette opération n'est pas nécessaire dans des conditions normales. Utilisez-le pour récupérer après ce qui suit :
- Un cluster s'arrête avant que la génération automatique de métadonnées ne réussisse.
- Une erreur ou un échec de job interrompt la génération des métadonnées.
- Un client qui ne prend pas en charge la génération de métadonnées UniForm Iceberg écrit dans la table Delta Lake.
Utilisez la syntaxe suivante pour Trigger manuellement la génération de métadonnées Iceberg :
MSCK REPAIR TABLE <table-name> SYNC METADATA
Voir REPAIR TABLE.
Lire Iceberg à l'aide d'un chemin JSON de métadonnées
Certains clients Iceberg, tels que BigQuery, exigent que vous fournissiez un chemin vers des fichiers de métadonnées versionnés pour enregistrer des tables Iceberg externes. Chaque fois que Databricks convertit une nouvelle version de la table Delta Lake en Iceberg, il crée un nouveau fichier JSON de métadonnées.
Pour les détails de configuration, veuillez-vous référer à la documentation de votre client de lecture Iceberg spécifique.
Delta Lake stocke les métadonnées Iceberg sous le répertoire de table selon le modèle suivant :
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Sur Databricks, vous pouvez examiner cet emplacement de métadonnées en effectuant l'une des opérations suivantes :
- Examen de la section
Delta Uniform Icebergrenvoyée parDESCRIBE EXTENDED table_name. - Examen des métadonnées de la table avec Catalog Explorer.
Les clients lecteurs Iceberg basés sur le chemin peuvent nécessiter la mise à jour et l’actualisation manuelles des chemins JSON de métadonnées pour lire les versions de table actuelles. Les utilisateurs pourraient rencontrer des erreurs lors de l'interrogation de tables Iceberg en utilisant des versions obsolètes, car les fichiers de données Parquet sont supprimés de la table Delta Lake avec VACUUM.
Limitations
Les limitations suivantes existent pour toutes les tables avec les lectures Iceberg activées :
-
Le support client Iceberg est en lecture seule. L'écriture n'est pas prise en charge.
- Les clients de lecture Iceberg pourraient avoir des limitations individuelles, quel que soit le support de Databricks pour les lectures Iceberg. Consultez la documentation pour le client que vous avez choisi.
-
Les vecteurs de suppression ne sont pas pris en charge pour les lectures d'Iceberg v2. Cependant, Apache Iceberg v3 prend en charge les vecteurs de suppression. Voir Utiliser les fonctionnalités d'Apache Iceberg v3 et Vecteurs de suppression dans Databricks.
-
Les lectures Iceberg ne peuvent pas être activées sur les vues matérialisées ou les tables de streaming à l'aide de
IcebergCompatV2. Pour les vues matérialisées gérées par pipeline et les tables de streaming, vous pouvez activer l'accès externe à Iceberg en utilisantIcebergCompatV3à la place. Cette fonctionnalité est en Aperçu public. Consultez Activer l'accès aux données externes pour les tables de streaming et les vues matérialisées. -
La table Delta Lake doit être accédée par nom (et non par chemin) pour automatiquement Trigger la génération de métadonnées Iceberg.
-
Les tables Delta Lake avec lectures Iceberg activées ne prennent pas en charge les types
VOID. -
Certaines fonctionnalités de table Delta Lake utilisées par les lectures Iceberg ne sont pas prises en charge par certains clients lecteurs OpenSharing. Consultez Qu'est-ce qu'OpenSharing ?.
-
Les destinataires d’OpenSharing peuvent lire les tables Delta Lake avec des lectures Iceberg activées en tant que tables Iceberg à l’aide de l’API Iceberg REST Catalog. Cette fonctionnalité est en Aperçu public. Consultez Activer le partage avec les clients externes Iceberg.
-
Le flux de données de modification hérité fonctionne pour les clients Delta lorsque les lectures Iceberg sont activées, mais n'est pas pris en charge dans Iceberg. Voir flux de données de modification hérité pour Delta Lake.