Lire des tables Delta Lake avec des clients Iceberg
Disponible dans Databricks Runtime 14.3 LTS et versions supérieures, la lecture Iceberg configure les tables Delta Lake pour générer automatiquement des métadonnées Iceberg, afin que les clients Iceberg puissent lire les données Delta Lake sans réécrire les fichiers.
Vous pouvez configurer une connexion externe pour que Unity Catalog agisse en tant que catalogue Iceberg. Voir Accéder aux tables Databricks depuis des clients Apache Iceberg.
Fonctionnement des lectures Iceberg
Delta Lake et Apache Iceberg se composent tous deux de fichiers de données Parquet et d'une couche de métadonnées. Lorsque vous activez les lectures Iceberg, Databricks configure vos tables pour utiliser le format universel (UniForm) pour la couche de métadonnées. UniForm génère automatiquement les métadonnées Iceberg de manière asynchrone parallèlement aux métadonnées Delta Lake, sans réécrire les fichiers de données Parquet. Une copie unique des fichiers de données prend en charge les clients Delta et Iceberg.
Lors de l’utilisation des lectures Iceberg, tenez compte des points 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 peut augmenter l'utilisation des ressources du driver.
Pour obtenir de la documentation sur la fonctionnalité de table UniForm IcebergCompatV1 héritée, consultez Legacy UniForm IcebergCompatV1.
Exigences
Pour activer les lectures Iceberg, les conditions 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é. Voir Renommer et supprimer des colonnes avec le mappage des colonnes Delta Lake.
- Une fois
IcebergCompatV2activé pour une table, vous ne pouvez pas supprimer la fonctionnalité de tablecolumnMapping.
- Une fois
-
La table Delta Lake doit avoir un
minReaderVersion>= 2 et unminWriterVersion>= 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 ultérieure.
Vous ne pouvez pas activer les vecteurs de suppression sur une table pour laquelle les lectures Iceberg sont activées.
Utilisez REORG pour désactiver et purger les vecteurs de suppression tout en activant la lecture Iceberg sur une table existante dont les vecteurs de suppression sont activés. Consultez Enable or upgrade Iceberg read support using REORG.
Activer les lectures Iceberg
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 Delta Lake externes. Voir Compatibilité des fonctionnalités et protocoles Delta Lake.
Lorsque vous activez les lectures Iceberg pour la première fois, la génération asynchrone des métadonnées commence. Cette tâche doit être terminée avant que des clients externes puissent query la table à l'aide d'Iceberg. Consultez Vérifier le statut de génération des métadonnées Iceberg.
Pour obtenir la liste des limitations, consultez Limitations.
Lors de la création de la table
Le mappage de colonnes est activé automatiquement lorsque vous activez les lectures Iceberg lors de 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 sous Databricks Runtime 15.4 LTS et versions supérieures :
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 vraie :
- Vous avez activé les vecteurs de suppression sur votre table.
- Vous avez précédemment activé la version
IcebergCompatV1de UniForm Iceberg. - Vous devez effectuer des lectures à 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 dans 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 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.
Vous pouvez également 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 les lectures Iceberg
Vous pouvez désactiver les lectures Iceberg en annulant la propriété de table delta.universalFormat.enabledFormats :
ALTER TABLE table_name UNSET TBLPROPERTIES ('delta.universalFormat.enabledFormats');
Les mises à niveau des versions du protocole de lecture et d'écriture de Delta Lake sont irréversibles. Consultez la compatibilité des fonctionnalités et les protocoles de Delta Lake.
Génération de métadonnées Iceberg
Databricks Trigger 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 que celui ayant terminé la transaction Delta Lake.
Vous pouvez également Trigger manuellement la génération de métadonnées Iceberg. Voir Trigger manuellement 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 vers 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 commit qui Triggeraient un second processus concurrent de génération de métadonnées sont commit avec succès dans Delta Lake, mais ne Triggerent pas la génération asynchrone de métadonnées Iceberg. [[ ## completed ##]] Cela évite une latence en cascade pour la génération de métadonnées dans le cas de charges de travail avec des commits fréquents (quelques secondes à quelques minutes entre les commits).
Voir les versions des tables Delta et Iceberg.
Versions des tables Delta et Iceberg
Delta Lake et Iceberg permettent des query time travel utilisant des versions de table ou des Timestamp stockés dans les métadonnées de la table. [[ ## completed ##]]
Il n’est pas garanti que les versions de table Delta Lake correspondent aux versions Iceberg, que ce soit par le Timestamp de commit ou 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 le statut de génération des métadonnées Iceberg.
Vérifier l'état de génération des métadonnées Iceberg
L'activation de la lecture Iceberg sur une table ajoute les champs suivants aux métadonnées de Unity Catalog et de la table Iceberg pour suivre l'état de 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. [[ ## completed ##]] |
Sur Databricks, vous pouvez examiner ces champs de métadonnées en effectuant l'une des actions suivantes :
- Examen de la section
Delta Uniform Icebergrenvoyée parDESCRIBE EXTENDED table_name. - Examen des métadonnées de table avec l'explorateur de catalogues.
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 en utilisant la syntaxe suivante :
SHOW TBLPROPERTIES <table-name>;
Trigger manuellement la conversion des métadonnées Iceberg
Vous pouvez Trigger manuellement la génération de métadonnées Iceberg pour la dernière version de la table Delta Lake. [[ ## completed ##]] Cette opération s'exécute de manière synchrone. Une fois l'opération terminée, le contenu de la table disponible dans Iceberg reflète la dernière version de la table Delta Lake disponible au moment où le processus de conversion a start. [[ ## completed ##]]
Cette opération n’est pas nécessaire dans des conditions normales. Utilisez-le pour récupérer à partir des éléments suivants :
- 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 d'accès aux métadonnées JSON
Certains clients Iceberg, tels que BigQuery, exigent que vous fournissiez un chemin d’accès aux 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 plus de détails sur la configuration, reportez-vous à la documentation de votre client de lecture Iceberg spécifique.
Delta Lake stocke les métadonnées Iceberg sous le répertoire de la table en utilisant le modèle suivant :
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Sur Databricks, vous pouvez consulter 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 table avec l'explorateur de catalogues.
Les clients de lecture Iceberg basés sur le chemin peuvent nécessiter une mise à jour et un rafraîchissement manuels des chemins de métadonnées JSON pour lire les versions actuelles des tables. Les utilisateurs peuvent rencontrer des erreurs lors de l’interrogation de tables Iceberg utilisant des versions obsolètes, car les fichiers de données Parquet sont supprimés de la table Delta Lake avec VACUUM.
VACUUM et nettoyage des métadonnées Iceberg
À partir de Databricks Runtime 17.2, la commande VACUUM supprime les fichiers non suivis dans le répertoire UniForm metadata/ tout en préservant les métadonnées Iceberg qui sont toujours accessibles.
La conversion UniForm effectue l'expiration des instantanés Iceberg en interne, mais utilise cleanExpiredFiles(false) default. Par conséquent, OPTIMIZE et la conversion UniForm classique rendent seulement les anciennes métadonnées Iceberg inaccessibles, mais ne les suppriment pas physiquement.
Pour supprimer physiquement les métadonnées Iceberg inaccessibles, exécutez FULL VACUUM une fois la période de rétention delta.deletedFileRetentionDuration écoulée. Voir Configurer la rétention des données pour les query time travel.
Si l’ optimisation prédictive est activée, Databricks gère automatiquement ce nettoyage ; vous n’avez donc pas besoin d’exécuter manuellement FULL VACUUM pour le nettoyage des métadonnées Iceberg.
Limitations
Les limitations suivantes s'appliquent à toutes les tables pour lesquelles les lectures Iceberg sont activées :
-
La prise en charge du client Iceberg est en lecture seule. Les écritures ne sont pas prises en charge.
- Les clients de lecture Iceberg peuvent avoir des limitations individuelles, indépendamment de la prise en charge des lectures Iceberg par Databricks. Consultez la documentation de votre client choisi.
-
Les vecteurs de suppression ne sont pas pris en charge pour les lectures 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.
-
La lecture Iceberg ne peut pas être activée sur des vues matérialisées ou des tables de streaming utilisant
IcebergCompatV2. Pour les vues matérialisées et les tables de streaming gérées par pipeline, vous pouvez activer l'accès externe Iceberg en utilisantIcebergCompatV3à la place. Cette fonctionnalité est en Aperçu public. Voir 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 accessible par nom (et non par chemin d’accès) pour Trigger automatiquement la génération de métadonnées Iceberg. [[ ## completed ##]]
-
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 de lecture OpenSharing. Voir Qu’est-ce qu’OpenSharing ?.
-
Les destinataires d’OpenSharing peuvent lire les tables Delta Lake, avec la lecture Iceberg activée, en tant que tables Iceberg à l’aide de l’API REST Catalog d’Iceberg. Cette fonctionnalité est en Aperçu public. Voir Activer le partage vers des clients Iceberg externes.
-
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.