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;

Utiliser les types de données GEOMETRY et GEOGRAPHY

Utilisez les types de données GEOMETRY et GEOGRAPHY pour stocker et interroger des données géospatiales. Voir typeGEOMETRY et typeGEOGRAPHY.

remarque

L’utilisation de GEOMETRY ou GEOGRAPHY 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 des colonnes GEOMETRY ou GEOGRAPHY :

SQL
CREATE TABLE catalog.schema.table (
geom_col GEOMETRY(3857),
geog_col GEOGRAPHY(4326)
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Pour ajouter une colonne GEOMETRY ou GEOGRAPHY à une table existante, utilisez la commande ALTER TABLE :

SQL
ALTER TABLE catalog.schema.table ADD COLUMN geom_col GEOMETRY(3857);
ALTER TABLE catalog.schema.table ADD COLUMN geog_col GEOGRAPHY(4326);

Créer une table avec des valeurs par default d’écriture

Iceberg v3 définit deux types de valeurs default :

  • Les valeurs par défaut d’écriture s’appliquent aux nouvelles lignes lorsqu’une écriture omet la colonne correspondante. Databricks prend en charge les default d’écriture.
  • Les valeurs par défaut initiales s'appliquent aux lignes préexistantes lorsqu'une nouvelle colonne est ajoutée. Databricks ne prend pas en charge les default initiaux.

Pour créer une nouvelle table gérée utilisant Delta Lake avec des lectures Iceberg et un write default :

SQL
CREATE TABLE catalog.schema.table (
id INT,
row_status STRING DEFAULT 'active'
) TBLPROPERTIES(
'delta.enableIcebergCompatV3' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg'
);

Pour voir la valeur « default » appliquée, insérez une ligne sans row_status:

SQL
INSERT INTO catalog.schema.table (id) VALUES (1);
SELECT * FROM catalog.schema.table;

La requête précédente renvoie ce qui suit, avec la default appliquée à row_status:

Output
id  row_status
1 active

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 initial default ne sont pas prises en charge. Lorsqu’une nouvelle colonne est ajoutée, un initial default définit la valeur pour les lignes préexistantes.

  • 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.