Aller au contenu principal

Utilisez les fonctionnalités v3 d'Apache Iceberg

Apache Iceberg v3 améliore les performances des query et introduit de nouvelles fonctionnalités pour les tables gérées utilisant Iceberg ou Delta Lake avec des lectures Iceberg dans Unity Catalog.

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

Exigences

Pour utiliser des tables gérées avec les fonctionnalités Iceberg v3, telles que les types géospatiaux, vous devez remplir les conditions suivantes :

  • Un Workspace avec Unity Catalog activé.
  • Databricks Runtime 18 LTS et versions ultérieures.

Créer une nouvelle table avec Iceberg v3

Créez de nouvelles tables avec Iceberg v3 activé, aussi bien pour les tables Delta Lake gérées avec lectures Iceberg que pour les tables Iceberg gérées.

Pour créer une nouvelle table gérée utilisant Delta Lake avec les lectures Iceberg et Iceberg v3 activées, 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 les lectures Iceberg, consultez Lire des tables Delta Lake avec des clients Iceberg.

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 des lectures Iceberg 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 utilisant Delta Lake avec les lectures Iceberg, 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 utilisant Delta Lake avec des lectures Iceberg 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.