UniForm IcebergCompatV1 hérité
Important
Cette documentation a été mise hors service et peut ne pas être mise à jour. Les produits, services ou technologies mentionnés dans ce contenu ne sont plus pris en charge. Consultez Utiliser UniForm pour lire des tables Delta avec des clients Iceberg.
Important
Cette fonctionnalité est en préversion publique dans Databricks Runtime 13.2 et versions ultérieures.
Le format universel Delta (UniForm) vous permet de lire des tables Delta avec des clients de lecteur Iceberg.
UniForm tire parti du fait que Delta Lake et Iceberg se composent de fichiers de données Parquet et d’une couche de métadonnées. UniForm génère automatiquement les 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 les deux formats.
Vous pouvez configurer une connexion externe pour qu’Unity Catalog fasse office de catalogue Iceberg. Consultez Lire à l’aide du point de terminaison du catalogue Unity Catalog Iceberg.
Remarque
La génération de métadonnées UniForm s’exécute de manière asynchrone sur le calcul utilisé pour écrire des données dans des tables Delta, ce qui peut augmenter l’utilisation des ressources du pilote.
Configuration requise
Pour activer UniForm, vous devez remplir les conditions suivantes :
- La table Delta doit être inscrite dans Unity Catalog. Les tables managées et externes sont prises en charge.
- Le mappage de colonnes doit être activé dans la table. Cf. Renommage et suppression des colonnes avec le mappage de colonnes Delta Lake.
- La table Delta doit avoir un
minReaderVersion
>= 2 etminWriterVersion
>= 7. Consultez Comment Azure Databricks gère-t-il la compatibilité des fonctionnalités Delta Lake ?. - Les écritures dans la table doivent utiliser Databricks Runtime 13.2 ou version ultérieure.
Activer Delta UniForm
Important
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 avec UniForm. Vous devez utiliser Databricks Runtime 13.2 ou version ultérieure pour écrire dans des tables Delta avec cette fonctionnalité activée.
Vous pouvez désactiver UniForm en désactivant la propriété de delta.universalFormat.enabledFormats
table. Vous ne pouvez pas désactiver le mappage de colonnes une fois qu’il a été activé, et les mises à niveau vers les versions du protocole de lecteur et d’enregistreur Delta Lake ne peuvent pas être annulées.
La propriété de tableau suivante active la prise en charge d’UniForm pour Iceberg. La seule valeur valide est iceberg
.
'delta.universalFormat.enabledFormats' = 'iceberg'
Vous devez également activer le mappage de colonnes et IcebergCompatV1
utiliser UniForm. Elles sont définies automatiquement si vous activez UniForm lors de la création d’une table, comme dans l’exemple suivant :
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg');
Si vous créez une table avec une instruction CTAS, vous devez spécifier manuellement le mappage de 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 de métadonnées asynchrones commence. Cette tâche doit se terminer avant que les clients externes puissent interroger la table à l’aide d’Iceberg. Consultez Vérifier les états de génération de métadonnées Iceberg.
Remarque
Si vous envisagez d’utiliser BigQuery comme client de lecteur Iceberg, vous devez définir spark.databricks.delta.write.dataFilesToSubdir
sur true
sur Azure Databricks pour répondre à une exigence BigQuery pour la disposition des données.
Voir Limitations.
Quand UniForm génère-t-il des métadonnées Iceberg ?
Azure Databricks déclenche la génération de métadonnées Iceberg de manière asynchrone une fois qu’une transaction d’écriture Delta Lake est terminée à l’aide du même calcul que celui qui a terminé la transaction Delta. Vous pouvez également déclencher manuellement la génération de métadonnées Iceberg. Consultez Déclencher manuellement la conversion de 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 validations fréquentes peuvent 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 à tout moment. Les validations qui déclencheraient un deuxième processus de génération de métadonnées Iceberg simultané seront validées avec succès sur Delta, mais elles ne déclenchent pas la génération asynchrone de métadonnées Iceberg. Cela évite la latence en cascade pour la génération de métadonnées pour les charges de travail avec des validations fréquentes (de secondes à minutes entre les validations).
Consultez Versions de la table Delta et Iceberg.
Vérifier les états de génération de métadonnées Iceberg
UniForm ajoute les champs suivants aux métadonnées de table Unity Catalog et Iceberg pour suivre les états de génération de métadonnées :
Champ métadonnées | Description |
---|---|
converted_delta_version |
Dernière version de la table Delta pour laquelle les métadonnées Iceberg ont été générées avec succès. |
converted_delta_timestamp |
Horodatage du dernier commit Delta pour lequel les métadonnées Iceberg ont été générées avec succès. |
Sur Azure Databricks, vous pouvez consulter ces champs de métadonnées à l’aide de Catalog Explorer. Ces champs et valeurs sont également retournés lors de l’utilisation de l’API REST pour obtenir une table.
Consultez la documentation de votre client de lecteur Iceberg pour savoir comment passer en revue les propriétés de table en dehors d’Azure Databricks. Pour OSS Apache Spark, vous pouvez voir ces propriétés à l’aide de la syntaxe suivante :
SHOW TBLPROPERTIES <table-name>;
Déclencher manuellement la conversion de métadonnées Iceberg
Vous pouvez déclencher manuellement la génération de 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 qu’une fois terminée, le contenu de la table disponible dans Iceberg reflète la dernière version de la table Delta disponible au démarrage du processus de conversion.
Cette opération ne doit pas être nécessaire dans des conditions normales, mais peut vous aider si vous rencontrez les éléments suivants :
- Un cluster se termine avant que la génération automatique de métadonnées ne réussisse.
- Une erreur ou un échec de travail interrompt la génération de métadonnées.
- Un client qui ne prend pas en charge la géneration des métadonnées UniForm Iceberg écrit dans la table Delta.
Utilisez la syntaxe suivante pour déclencher manuellement la génération de métadonnées Iceberg :
MSCK REPAIR TABLE <table-name> SYNC METADATA
Consultez REPAIR TABLE.
Lecture à l’aide d’un chemin JSON de métadonnées
Certains clients Iceberg nécessitent que vous fournissiez un chemin d’accès aux fichiers de métadonnées versionnés pour inscrire des tables Iceberg externes. Chaque fois qu’UniForm convertit une nouvelle version de la table Delta en Iceberg, il crée un fichier JSON de métadonnées.
Les clients qui utilisent des chemins JSON de métadonnées pour la configuration d’Iceberg incluent BigQuery. Pour plus d’informations sur la configuration, reportez-vous à la documentation relative au client lecteur Iceberg.
Delta Lake stocke les métadonnées Iceberg sous le répertoire de la table, selon le modèle suivant :
<table-path>/metadata/<version-number>-<uuid>.metadata.json
Vous pouvez trouver le chemin d’accès de ce fichier à l’aide de Catalog Explorer. Pour les tables avec UniForm 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 inclut les informations suivantes :
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
Important
Les clients de lecteur Iceberg basés sur un chemin d’accès peuvent nécessiter la mise à jour et l’actualisation manuelles des chemins JSON des 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 du point de terminaison du catalogue Unity Catalog Iceberg
Certains clients Iceberg peuvent se connecter à un catalogue REST Iceberg. Unity Catalog fournit une implémentation en lecture seule de l’API du catalogue REST Iceberg pour les tables Delta avec UniForm activé à l’aide du point de terminaison /api/2.1/unity-catalog/iceberg
. Consultez la spécification de l’API REST Iceberg pour plus d’informations sur l’utilisation de cette API REST.
Les clients connus pour prendre en charge l’API du 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é. Pour plus d’informations sur la configuration, reportez-vous à la documentation relative au client lecteur Iceberg.
Vous devez générer et configurer un jeton d’accès personnel Azure Databricks pour permettre à d’autres services de se connecter à Unity Catalog. Consultez Authentifier l’accès aux ressources Azure Databricks.
Voici un exemple des paramètres permettant de configurer OSS Apache Spark pour lire UniForm comme 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 de l’espace de travail dans lequel vous avez généré le jeton d’accès personnel pour <api-root>
.
Remarque
Lors de l’interrogation de tables dans Unity Catalog à l’aide de cette méthode, les identificateurs d’objet utilisent le modèle suivant :
unity.<catalog-name>.<schema-name>.<table-name>
Ce modèle utilise les mêmes noms à trois niveaux namespacing présent dans Unity Catalog, mais ajoute un préfixe unity
supplémentaire .
Versions de la table Delta et Iceberg
Delta Lake et Iceberg autorisent les requêtes de voyage dans le temps à l’aide de versions de table ou d’horodatages stockés dans les métadonnées de table.
En général, les versions de table Iceberg et Delta ne s’alignent pas sur l’horodatage de validation ou 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 les états de génération de métadonnées Iceberg.
Limites
Les limites suivantes existent :
- UniForm ne fonctionne pas sur les tables avec des vecteurs de suppression activés. Consultez Que sont les vecteurs de suppression ?.
- Les tables Delta avec UniForm activé ne prennent pas en charge les types
LIST
,MAP
etVOID
. - Les clients Iceberg peuvent uniquement lire à partir d’UniForm. Les écritures ne sont pas prises en charge.
- Les clients de lecteur Iceberg peuvent avoir des limitations individuelles, indépendamment d’UniForm. Consultez la documentation relative au client que vous avez choisi.
- Les clients de lecteur Iceberg version 1.2.0 et versions ultérieures ne prennent pas en charge
INT96
le type d’horodatage écrit par Apache Spark. Utilisez le code suivant dans les notebooks qui écrivent dans des tables UniForm pour éviter cette limitation :spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
- La version en préversion publique du point de terminaison Unity Catalog Iceberg n’est pas destinée aux charges de travail de production à grande échelle. Vous pouvez rencontrer une limitation de débit si vous dépassez un seuil de 5 requêtes par seconde.
Les fonctionnalités Delta Lake suivantes fonctionnent pour les clients Delta lorsque UniForm est activé, mais n’ont pas de prise en charge dans Iceberg :
- Flux des changements de données
- Delta Sharing