Aller au contenu principal

Utilisez les fonctionnalités v3 d'Apache Iceberg

Apache Iceberg v3 améliore les performances des requêtes et introduit de nouvelles capacités pour les tables gérées à l'aide d'Iceberg ou de Delta Lake avec UniForm dans Unity Catalog.

Les fonctionnalités clés d'Iceberg v3 sont :

Exigences

Pour utiliser les fonctionnalités Iceberg v3, vous devez satisfaire aux exigences suivantes :

  • Un Workspace avec Unity Catalog activé.
  • Databricks Runtime 18.0 ou version supérieure pour lire et écrire dans des tables gérées avec Iceberg v3.
  • Databricks Runtime 18.2 ou version ultérieure pour utiliser les types géospatiaux avec Iceberg v3.

Créer une nouvelle table avec Iceberg v3

Créez de nouvelles tables avec Iceberg v3 activé pour les tables Delta Lake gérées avec UniForm et les tables Iceberg gérées.

Pour créer une nouvelle table gérée à l'aide de Delta Lake avec UniForm et Iceberg v3 activés, utilisez la commande SQL suivante :

SQL
CREATE OR REPLACE TABLE main.schema.table (c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg',
'delta.enableIcebergCompatV3' = 'true'
);

Pour plus d'informations sur UniForm, consultez Lire les tables Delta Lake avec les clients Iceberg à l'aide d'UniForm.

Mettre à niveau une table existante vers Iceberg v3

Vous pouvez mettre à niveau une table existante vers Iceberg v3 en :

  1. Activation de toute fonctionnalité v3 sur une table.
  2. Définition de la version du format Iceberg sur une table à 3 (indiqué ci-dessous).
info

Les tables peuvent être rétrogradées de la version 3 à la version 2 en restaurant la table à une version antérieure à la mise à niveau vers la version 3 à l'aide de RESTORE. Consultez Rétrograder une table à une version précédente.

Pour mettre à niveau une table gérée utilisant Delta Lake avec UniForm vers la v3, utilisez la commande suivante :

SQL
ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.enableIcebergCompatV2' = 'false'
);

Activer les vecteurs de suppression

Les vecteurs de suppression optimisent les opérations de modification de données au niveau des lignes et sont activés par default sur toutes les nouvelles tables Iceberg v3. Consultez Vecteurs de suppression dans Databricks.

remarque

L’activation des vecteurs de suppression sur une table Iceberg existante met à niveau la version du format Iceberg vers la version 3.

Pour créer une nouvelle table gérée à l'aide de Delta Lake avec UniForm, Iceberg v3 et les vecteurs de suppression activés, définissez les propriétés de table suivantes :

SQL
CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
'delta.enableDeletionVectors' = 'true',
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Utilisez le type de données VARIANT

Le type de données VARIANT vous permet de stocker et de query des données semi-structurées.

remarque

L'utilisation de VARIANT dans une table Iceberg existante met à niveau la version du format Iceberg vers la version 3.

Pour créer une nouvelle table gérée à l'aide de Delta Lake avec UniForm et une colonne VARIANT :

SQL
CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Pour ajouter une colonne VARIANT à une table existante, utilisez la commande ALTER TABLE :

SQL
ALTER TABLE catalog.schema.table ADD COLUMN variant_col VARIANT;

Rétrograder une table vers une version précédente d'Apache Iceberg

Si vous devez rétablir une table à un état antérieur à sa mise à niveau vers Iceberg v3, vous pouvez utiliser la commande RESTORE.

SQL
set spark.databricks.delta.restore.protocolDowngradeAllowed = true;
RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;
set spark.databricks.delta.restore.protocolDowngradeAllowed = false;

Limitations

Databricks prend en charge la version 3 de la spécification Iceberg, à l'exception des éléments suivants :

  • Les paramètres par défaut, y compris les paramètres par défaut d'écriture et les paramètres par défaut initiaux, ne sont pas pris en charge.

  • Les types de données suivants ne sont pas pris en charge :

    • Type inconnu
    • Timestamp d'une précision de nanoseconde.
  • Les transformations multi-arguments ne sont pas prises en charge.