UniForm IcebergCompatV1 hérité
Cette documentation a été retirée et pourrait ne pas être mise à jour. Les produits, services ou technologies mentionnés dans ce contenu ne sont plus pris en charge. Consultez Lire les tables Delta Lake avec les clients Iceberg à l’aide de UniForm.
Aperçu
Cette fonctionnalité est en aperçu public dans Databricks Runtime 13.2 et versions supérieures.
Le format universel Delta (UniForm) vous permet de lire les tables Delta avec des clients de lecture Apache Iceberg.
UniForm tire parti du fait que Delta Lake et Iceberg sont constitués de fichiers de données Parquet et d'une couche de métadonnées. UniForm génère automatiquement des métadonnées Iceberg de manière asynchrone, sans réécrire les données, afin que les clients Iceberg puissent lire les tables Delta comme s'il s'agissait de tables Iceberg. Une seule copie des fichiers de données sert aux deux formats.
Vous pouvez configurer une connexion externe pour que Unity Catalog agisse comme un catalogue Iceberg. Consulter Lire à l’aide de l’endpoint du catalogue Iceberg d’Unity Catalog.
La génération de métadonnées UniForm s'exécute de manière asynchrone sur le compute utilisé pour écrire des données dans des tables Delta, ce qui pourrait augmenter l'utilisation des ressources du Driver.
Exigences
Pour activer UniForm, vous devez remplir les exigences suivantes :
- La table Delta doit être enregistrée auprès du 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.
- La table Delta doit avoir un
minReaderVersion>= 2 et unminWriterVersion>= 7. Voir Compatibilité des fonctionnalités et protocoles de Delta Lake. - Les écritures dans la table doivent utiliser Databricks Runtime 13,2 ou une version ultérieure.
Activer Delta UniForm
L'activation de Delta UniForm définit la fonctionnalité de table Delta IcebergCompatV1, une fonctionnalité de protocole d'écriture. Seuls les clients qui prennent en charge cette fonctionnalité de table peuvent écrire dans des tables compatibles UniForm. Vous devez utiliser Databricks Runtime 13.2 ou version ultérieure pour écrire dans les tables Delta avec cette fonctionnalité activée.
Vous pouvez désactiver UniForm en annulant la propriété de table delta.universalFormat.enabledFormats. Vous ne pouvez pas désactiver le mappage de colonnes une fois qu’il a été activé, et les mises à niveau vers les versions de protocole de lecture et d’écriture de Delta Lake ne peuvent pas être annulées.
La propriété de table suivante active la prise en charge d'UniForm pour Iceberg. iceberg est la seule valeur valide.
'delta.universalFormat.enabledFormats' = 'iceberg'
Vous devez également activer le mappage des colonnes et IcebergCompatV1 pour utiliser UniForm. Ces éléments sont définis automatiquement si vous activez UniForm lors de la création de la table, comme dans l'exemple suivant :
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg');
Si vous créez une nouvelle table avec une instruction CTAS, vous devez spécifier manuellement le mappage des colonnes, comme dans l'exemple suivant :
CREATE TABLE T
TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.universalFormat.enabledFormats' = 'iceberg')
AS
SELECT * FROM source_table;
Si vous modifiez une table existante, vous devez spécifier toutes ces propriétés, comme dans l'exemple suivant :
ALTER TABLE T SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV1' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Lorsque vous activez UniForm pour la première fois, 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.
Si vous prévoyez d'utiliser BigQuery comme client lecteur Iceberg, vous devez définir spark.databricks.delta.write.dataFilesToSubdir sur true sur Databricks pour répondre à une exigence de BigQuery concernant le layout des données.
Consultez les Limitations.
Quand UniForm génère-t-il des métadonnées Iceberg ?
Databricks déclenche la génération des métadonnées Iceberg de manière asynchrone après qu'une transaction d'écriture Delta Lake est terminée, en utilisant le même compute qui a terminé la transaction Delta. Vous pouvez également Trigger manuellement la génération des métadonnées Iceberg. Consultez 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 Iceberg, les tables Delta avec des commits fréquents pourraient regrouper plusieurs commits Delta en un seul commit Iceberg.
Delta Lake garantit qu'un seul processus de génération de métadonnées Iceberg est en cours à la fois. Les commit qui Trigger un deuxième processus concurrent de génération de métadonnées Iceberg seront validés avec succès dans Delta, mais ils 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.
Vérifier le statut de la génération des métadonnées Iceberg
UniForm ajoute les champs suivants aux métadonnées des tables Unity Catalog et 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 pour laquelle les métadonnées Iceberg ont été générées avec succès. |
| Timestamp du dernier commit Delta 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 utilisant Catalog Explorer. Ces champs et valeurs sont également renvoyés lors de l'utilisation de l'API REST pour obtenir une table.
Consultez la documentation de votre client lecteur 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 Trigger manuellement la génération des métadonnées Iceberg pour la dernière version de la table Delta. Cette opération s'exécute de manière synchrone, ce qui signifie que lorsqu'elle est terminée, le contenu de la table disponible dans Iceberg reflète la dernière version de la table Delta disponible au début du processus de conversion start.
Cette opération ne devrait pas être nécessaire dans des conditions normales, mais peut être utile si vous rencontrez 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.
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 à l'aide d'un chemin JSON de métadonnées
Certains clients Iceberg vous demandent de fournir un chemin d'accès aux fichiers de métadonnées versionnés pour enregistrer les tables Iceberg externes. Chaque fois que UniForm convertit une nouvelle version de la table Delta en Iceberg, il crée un nouveau fichier JSON de métadonnées.
Les clients qui utilisent les chemins JSON des métadonnées pour configurer Iceberg incluent BigQuery. Reportez-vous à la documentation du client de lecture Iceberg pour obtenir des détails sur la configuration.
Delta Lake stocke les métadonnées Iceberg dans le répertoire de table, selon le modèle suivant :
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Vous pouvez trouver le chemin de ce fichier à l'aide de l'Explorateur de catalogue. Pour les tables pour lesquelles UniForm est activé, les détails de la table Delta incluent un champ pour l'emplacement des métadonnées Iceberg.
Vous pouvez également utiliser l'API REST pour obtenir tous les détails d'une table, y compris l'emplacement des métadonnées. Utilisez la commande suivante :
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
La réponse comprend les informations suivantes :
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
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 peuvent rencontrer des erreurs lors de l'interrogation de tables Iceberg à l'aide de versions obsolètes, car les fichiers de données Parquet sont supprimés de la table Delta avec VACUUM.
Lire à l’aide de l’Endpoint du catalogue Iceberg d’Unity Catalog
Certains clients Iceberg peuvent se connecter à un catalogue REST Iceberg. Unity Catalog fournit une implémentation en lecture seule de l'API Iceberg REST du catalogue pour les tables Delta avec UniForm activé à l'aide de l'endpoint /api/2.1/unity-catalog/iceberg. Consultez la spécification Iceberg REST API pour plus de détails sur l'utilisation de cette API REST.
Les clients connus pour prendre en charge l'API de catalogue Iceberg incluent Apache Spark, Flink et Trino. Vous devez configurer l'accès au stockage d'objets cloud sous-jacent contenant la table Delta avec UniForm activé. Veuillez consulter la documentation du client Iceberg reader pour les détails de configuration.
Vous devez générer et configurer un jeton d'accès personnel Databricks pour permettre à d'autres services de se connecter à Unity Catalog. Consultez Autoriser l'accès aux ressources Databricks.
Voici un exemple des paramètres à configurer pour qu'Apache Spark OSS lise UniForm en tant qu'Iceberg :
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO
Remplacez l'URL complète du Workspace dans lequel vous avez généré le jeton d'accès personnel par <api-root>.
Lorsque vous interrogez des tables dans Unity Catalog à l'aide de cette méthode, les identifiants d'objet utilisent le modèle suivant :
unity.<catalog-name>.<schema-name>.<table-name>
Ce modèle utilise le même espace de noms à trois niveaux présent dans Unity Catalog, mais ajoute un préfixe supplémentaire unity.
Versions des tables Delta et Iceberg
Delta Lake et Iceberg permettent tous deux les requêtes de time travel en utilisant les versions de table ou les timestamps stockés dans les métadonnées de la table.
En général, les versions des tables Iceberg et Delta ne s'alignent ni par le timestamp de commit ni par l'ID de version. Si vous souhaitez vérifier à quelle version d'une table Delta correspond une version donnée d'une table Iceberg, vous pouvez utiliser les propriétés de table correspondantes définies sur la table Iceberg. Consultez Vérifier l'état de génération des métadonnées Iceberg.
Limitations
Les limitations suivantes existent :
- UniForm ne fonctionne pas sur les tables avec les vecteurs de suppression activés. Découvrir les vecteurs de suppression dans Databricks.
- Les tables Delta avec UniForm activé ne prennent pas en charge les types
LIST,MAPetVOID. - Les clients Iceberg ne peuvent lire qu'à partir d'UniForm. L'écriture n'est pas prise en charge.
- Les clients lecteurs Iceberg peuvent avoir des limitations individuelles, indépendamment de UniForm. Consultez la documentation de votre client choisi.
- Les clients lecteurs Iceberg de version 1.2.0 et inférieure ne prennent pas en charge le type de Timestamp
INT96écrit par Apache Spark. Utilisez le code suivant dans les Notebooks qui écrivent dans des tables UniForm afin d'éviter cette limitation :spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”) - La version d'aperçu public de l'endpoint Unity Catalog Iceberg n'est pas destinée aux charges de travail de production à grande échelle. Vous pourriez subir une limitation de débit si vous dépassez un threshold de 5 queries par seconde.
Les fonctionnalités suivantes de Delta Lake fonctionnent pour les clients Delta lorsque UniForm est activé, mais ne sont pas prises en charge dans Iceberg :
- Flux de données de modification
- OpenSharing