Gérer les ressources Iceberg dans BigLake Metastore

BigLake Metastore est un métastore unique et partagé qui permet le partage de données entre les moteurs de traitement des données. Il élimine la nécessité de gérer des métastores distincts pour vos charges de travail Open Source.

Ce document explique comment créer, afficher, modifier et supprimer des ressources Iceberg dans BigLake Metastore.

Avant de commencer

  1. Make sure that billing is enabled for your Google Cloud project.

    Découvrez comment vérifier si la facturation est activée sur un projet.
  2. Enable the BigQuery, BigQuery Storage, and Dataproc APIs.

    Enable the APIs

  3. Facultatif : Découvrez le fonctionnement de BigLake Metastore et pourquoi vous devriez l'utiliser.

Rôles requis

Pour obtenir les autorisations nécessaires pour gérer les ressources Iceberg dans le métastore BigLake, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

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.

Créer des ressources de metastore

Les sections suivantes décrivent comment créer des ressources dans le metastore BigLake.

Créer des espaces de noms

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode datasets.insert et spécifiez le champ ExternalCatalogDatasetOptions dans la ressource d'ensemble de données que vous transmettez.

{
  "datasetReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID"
  },
  "externalCatalogDatasetOptions": {
    "defaultStorageLocationUri": "URI",
    "parameters": {
      ...
    }
  },
  "location": "LOCATION"
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant votre ensemble de données cible
  • DATASET_ID : ID de votre ensemble de données cible
  • URI : URI Cloud Storage pour toutes les tables de l'ensemble de données
  • LOCATION : emplacement BigQuery dans lequel vous souhaitez créer l'ensemble de données.

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre nouvel espace de noms

Terraform

provider "google" {
  project = "PROJECT_ID"
}

resource "google_bigquery_dataset" "default" {
  dataset_id = "DATASET_ID"
  location   = "LOCATION"

  external_catalog_dataset_options {
    default_storage_location_uri = "URI"
    parameters = {
      ...
    }
  }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant votre ensemble de données cible
  • DATASET_ID : ID de votre ensemble de données cible
  • LOCATION : emplacement BigQuery dans lequel vous souhaitez créer l'ensemble de données.
  • URI : URI Cloud Storage pour toutes les tables de l'ensemble de données

Créer des tables Iceberg

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode tables.insert et spécifiez le champ ExternalCatalogTableOptions dans la ressource de table que vous transmettez.

{
  "tableReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID",
    "tableId": "TABLE_ID"
  },
  "externalCatalogTableOptions": {
    "parameters": {
      "table_type": "iceberg",
      "metadata_location": "METADATA_URI"
    },
    "connection_id": "CONNECTION_ID"
  }
}

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant votre table cible.
  • DATASET_ID : ID de l'ensemble de données contenant votre table cible.
  • TABLE_ID : ID de votre table cible.
  • METADATA_URI : URI Cloud Storage du dernier fichier de métadonnées Iceberg. Exemple : gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID : ID de votre connexion à Cloud Storage.

Spark SQL

CREATE TABLE SPARK_CATALOG.NAMESPACE.TABLE
  (id bigint, data string) USING iceberg;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms
  • TABLE : nom de votre nouvelle table

Terraform

resource "google_bigquery_table" "default" {
  deletion_protection = false
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "TABLE"

  external_catalog_table_options {
    storage_descriptor {
      location_uri  = "STORAGE_URI"
      input_format  = "org.apache.hadoop.mapred.FileInputFormat"
      output_format = "org.apache.hadoop.mapred.FileOutputFormat"
    }
    parameters = {
      "table_type"        = "iceberg"
      "metadata_location" = "METADATA_URI"
      "write.parquet.compression-codec" : "zstd"
      "EXTERNAL" : "TRUE"
    }
  }
}

Remplacez les éléments suivants :

  • TABLE : nom de la table cible.
  • STORAGE_URI : URI Cloud Storage où sont stockées les données de la table, commençant par gs://.
  • METADATA_URI : URI Cloud Storage du dernier fichier de métadonnées Iceberg. Exemple : gs://mybucket/mytable/metadata/1234.metadata.json.

Afficher les ressources de métastore

Les sections suivantes expliquent comment afficher les ressources dans le metastore BigLake.

Afficher les espaces de noms

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode datasets.list pour afficher tous les espaces de noms ou la méthode datasets.get pour afficher des informations sur un espace de noms défini.

Spark SQL

Pour afficher tous les espaces de noms d'un catalogue, utilisez l'instruction suivante :

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Remplacez SPARK_CATALOG par le nom de votre catalogue Spark.

Pour afficher des informations sur un espace de noms défini, utilisez l'instruction suivante :

DESCRIBE { DATABASE | NAMESPACE } [EXTENDED]
SPARK_CATALOG.NAMESPACE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms

Afficher des tables

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode tables.list pour afficher toutes les tables d'un espace de noms ou la méthode tables.get pour afficher des informations sur une table définie.

Spark SQL

Pour afficher toutes les tables d'un espace de noms, utilisez l'instruction suivante :

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms

Pour afficher des informations sur une table définie, utilisez l'instruction suivante :

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms
  • TABLE : par le nom de votre table

Modifier les ressources de métastore

Les sections suivantes décrivent comment modifier les ressources dans le metastore BigLake.

Mettre à jour les espaces de noms

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode datasets.patch et mettez à jour le champ ExternalCatalogDatasetOptions dans la ressource d'ensemble de données. La méthode datasets.update n'est pas recommandée, car elle remplace l'intégralité de la ressource d'ensemble de données.

Spark SQL

Utilisez l'instruction ALTER DATABASE.

Mettre à jour les tables Iceberg

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode tables.patch et mettez à jour le champ ExternalCatalogTableOptions dans la ressource de table. La méthode tables.update n'est pas recommandée, car elle remplace l'intégralité de la ressource de table.

Pour mettre à jour le schéma ou le fichier de métadonnées, utilisez la méthode tables.patch et définissez la propriété autodetect_schema sur "true" :

PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID?autodetect_schema=true

Remplacez les éléments suivants :

  • PROJECT_ID : ID du projet contenant la table que vous souhaitez mettre à jour
  • DATASET_ID : ID de l'ensemble de données contenant la table que vous souhaitez mettre à jour.
  • TABLE_ID : ID de la table que vous souhaitez mettre à jour

Dans le corps de la requête, spécifiez la valeur mise à jour pour chaque champ. Par exemple, pour mettre à jour l'emplacement des métadonnées de la table Iceberg, spécifiez la valeur mise à jour pour le champ metadata_location :

{
  "externalCatalogTableOptions": {
    "parameters": {"metadata_location": "METADATA_URI"}
  },
  "schema": null
}'

Remplacez METADATA_URI par l'URI Cloud Storage du dernier fichier de métadonnées Iceberg. Exemple : gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Utilisez l'instruction ALTER TABLE.

Supprimer les ressources de métastore

Les sections suivantes décrivent comment supprimer des ressources dans le metastore BigLake.

Supprimer des espaces de noms

Sélectionnez l'une des options suivantes :

API

Exécutez la méthode datasets.delete. Définissez le paramètre deleteContents sur "true" pour supprimer les tables de votre espace de noms.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms

Supprimer des tables

Sélectionnez l'une des options suivantes :

API

Utilisez la méthode tables.delete et spécifiez le nom de la table. Cette méthode ne supprime pas les fichiers associés dans Cloud Storage.

Spark SQL

Pour n'abandonner que la table, utilisez l'instruction suivante:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms
  • TABLE : nom de la table à supprimer

Pour abandonner la table et supprimer les fichiers associés dans Cloud Storage, utilisez l'instruction suivante :

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Remplacez les éléments suivants :

  • SPARK_CATALOG : nom de votre catalogue Spark
  • NAMESPACE : nom de votre espace de noms
  • TABLE : nom de la table à supprimer

Étapes suivantes