Modifier des données avec des instructions LMD

La modification des données vous permet de mettre à jour, de supprimer, de fusionner et de tronquer des enregistrements dans vos tables Apache Iceberg du catalogue d'environnements d'exécution Lakehouse.

Lorsque le langage de manipulation de données (LMD) BigQuery est activé dans votre table, vous pouvez exécuter des instructions LMD standards à partir de BigQuery, ainsi que des moteurs Open Source tels que Spark et Trino, ce qui vous permet d'obtenir une interopérabilité en écriture complète sur une seule copie des données stockées dans Cloud Storage.

Avant de commencer

  1. Vérifiez que la facturation est activée pour votre Google Cloud projet.

  2. Activez l'API BigLake.

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer l'API

  3. Configurez le catalogue d'environnements d'exécution Lakehouse avec le point de terminaison du catalogue REST Apache Iceberg.

Rôles requis

Pour obtenir les autorisations nécessaires pour modifier les données d'une table, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet et votre bucket de stockage :

  • Écrire des données de table en mode de distribution d'identifiants: Éditeur BigLake (roles/biglake.editor) : le projet
  • Écrire des données de table en mode de non-distribution d'identifiants :
    • Éditeur BigLake (roles/biglake.editor) : le projet
    • Utilisateur d'objets Storage (roles/storage.objectUser) : le bucket Cloud Storage

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Fonctionnalités et compatibilité des tables

Lorsque vous utilisez des tables dans le catalogue d'environnements d'exécution Lakehouse, il est utile de comprendre les différents types de tables et leurs fonctionnalités d'activation des fonctionnalités. Pour en savoir plus sur l'utilisation des tables Apache Iceberg, consultez Présentation des tables Apache Iceberg tables.

Tables Iceberg compatibles

Seules les tables Apache Iceberg V2 (DG) et V3 (bêta) sont compatibles. Les tables Iceberg V1 ne sont pas compatibles. Pour mettre à niveau les tables V1 existantes, consultez Mettre à niveau les tables Iceberg V1 vers la version V2.

Utiliser les options de table (bêta)

Vous pouvez choisir d'utiliser les fonctionnalités gérées de BigQuery, telles que le langage de manipulation de données (LMD) BigQuery et la gestion automatique des tables, en configurant des propriétés de table spécifiques. Ces fonctionnalités sont activées de différentes manières selon l'endroit où la table est créée :

  • À partir de BigQuery : le langage de manipulation de données (LMD) BigQuery et la gestion automatique des tables sont activés par défaut.
  • À partir de moteurs Open Source : pour activer ces fonctionnalités, vous devez configurer explicitement les propriétés de la table. Pour en savoir plus, consultez Configurer les options de table.

Mettre à jour des données

Mettez à jour les lignes existantes dans la table :

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

BigQuery

UPDATE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET data = "updated row"
WHERE id = 1;

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre Google Cloud projet.
  • CATALOG_ID: ID de votre catalogue d'environnements d'exécution Lakehouse.
  • NAMESPACE : nom de votre espace de noms Iceberg.
  • TABLE_NAME : nom de votre table Iceberg.

Supprimer des données

Supprimez des lignes spécifiques de la table :

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

DELETE FROM TABLE_NAME WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

DELETE FROM TABLE_NAME WHERE id = 1;

BigQuery

DELETE FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
WHERE id = 1;

Fusionner des données

Fusionnez les données d'une table source dans votre table Iceberg cible :

Spark

ALTER TABLE TARGET_TABLE SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

Trino

ALTER TABLE TARGET_TABLE SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

BigQuery

MERGE `PROJECT_ID.CATALOG_ID.NAMESPACE.TARGET_TABLE` t
USING `PROJECT_ID.CATALOG_ID.NAMESPACE.SOURCE_TABLE` s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (id, data);

Étape suivante