Modifier des données avec des instructions LMD

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

Lorsque le LMD BigQuery est activé sur votre table, vous pouvez exécuter des instructions LMD standards à partir de BigQuery, en plus des moteurs Open Source comme Spark et Trino. Vous bénéficiez ainsi d'une interopérabilité d'é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 projet Google Cloud .

  2. Activez l'API BigLake si ce n'est pas déjà fait.

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    Activer l'API

  3. Configurez le catalogue 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'un tableau, 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
  • Écrivez les données de la table en mode de distribution d'identifiants non activé :
    • Éditeur BigLake (roles/biglake.editor) : 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 tableaux

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

Tables Iceberg compatibles

Seules les tables Apache Iceberg V2 (disponibilité générale) et V3 (bêta) sont acceptées. Les tables Iceberg V1 ne sont pas acceptées. Pour mettre à niveau les tables V1 existantes, consultez Mettre à niveau les tables Iceberg V1 vers V2.

Utiliser les options de tableau (aperçu)

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ù le tableau est créé :

  • Depuis BigQuery : le langage DML BigQuery et la gestion automatique des tables sont activés par défaut.
  • À partir de moteurs Open Source : pour activer cette fonctionnalité, vous devez configurer explicitement les propriétés des tables. Pour en savoir plus, consultez Configurer les options de tableau.

Mettre à jour des données

Mettez à jour les lignes existantes dans le tableau :

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 projet Google Cloud.
  • 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 du tableau :

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);

Étapes suivantes