Gestire le risorse Iceberg nel metastore BigLake

BigLake Metastore è un metastore singolo e condiviso che consente la condivisione dei dati tra i motori di elaborazione dei dati, eliminando la necessità di gestire metastore separati per i carichi di lavoro open source.

Questo documento spiega come creare, visualizzare, modificare ed eliminare le risorse Iceberg in BigLake Metastore.

Prima di iniziare

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

    Scopri come verificare se la fatturazione è abilitata per un progetto.
  2. Enable the BigQuery, BigQuery Storage, and Dataproc APIs.

    Enable the APIs

  3. (Facoltativo) Scopri come funziona il metastore BigLake e perché dovresti utilizzarlo.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per gestire le risorse Iceberg nel metastore BigLake, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea risorse metastore

Le sezioni seguenti descrivono come creare risorse nel metastore BigLake.

Crea spazi dei nomi

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo datasets.insert e specifica il campo ExternalCatalogDatasetOptions nella risorsa dataset che trasmetti.

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene il set di dati di destinazione
  • DATASET_ID: l'ID del set di dati di destinazione
  • URI: l'URI Cloud Storage per tutte le tabelle nel set di dati
  • LOCATION: la posizione BigQuery in cui vuoi creare il set di dati

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del nuovo spazio dei nomi

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 = {
      ...
    }
  }
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene il set di dati di destinazione
  • DATASET_ID: l'ID del set di dati di destinazione
  • LOCATION: la posizione BigQuery in cui vuoi creare il set di dati
  • URI: l'URI Cloud Storage per tutte le tabelle nel set di dati

Creare tabelle Iceberg

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo tables.insert e specifica il campo ExternalCatalogTableOptions nella risorsa tabella che trasmetti.

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene la tabella di destinazione.
  • DATASET_ID: l'ID del set di dati che contiene la tabella di destinazione.
  • TABLE_ID: l'ID della tabella di destinazione.
  • METADATA_URI: l'URI Cloud Storage per l'ultimo file di metadati Iceberg. Ad esempio gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: l'ID della tua connessione a Cloud Storage.

Spark SQL

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

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi
  • TABLE: il nome della nuova tabella

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"
    }
  }
}

Sostituisci quanto segue:

  • TABLE: il nome della tabella di destinazione.
  • STORAGE_URI: l'URI Cloud Storage in cui sono archiviati i dati della tabella, a partire da gs://.
  • METADATA_URI: l'URI Cloud Storage per l'ultimo file di metadati Iceberg. Ad esempio gs://mybucket/mytable/metadata/1234.metadata.json.

Visualizzare le risorse del metastore

Le sezioni seguenti descrivono come visualizzare le risorse nel metastore BigLake.

Visualizzare gli spazi dei nomi

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo datasets.list per visualizzare tutti gli spazi dei nomi oppure utilizza il metodo datasets.get per visualizzare le informazioni su uno spazio dei nomi definito.

Spark SQL

Per visualizzare tutti gli spazi dei nomi in un catalogo, utilizza la seguente istruzione:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Sostituisci SPARK_CATALOG con il nome del tuo catalogo Spark.

Per visualizzare informazioni su uno spazio dei nomi definito, utilizza la seguente istruzione:

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

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi

Visualizza tabelle

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo tables.list per visualizzare tutte le tabelle in uno spazio dei nomi oppure utilizza il metodo tables.get per visualizzare informazioni su una tabella definita.

Spark SQL

Per visualizzare tutte le tabelle in uno spazio dei nomi, utilizza la seguente istruzione:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi

Per visualizzare le informazioni su una tabella definita, utilizza la seguente istruzione:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi
  • TABLE: il nome della tabella

Modificare le risorse del metastore

Le sezioni seguenti descrivono come modificare le risorse nel metastore BigLake.

Aggiorna spazi dei nomi

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo datasets.patch e aggiorna il campo ExternalCatalogDatasetOptions nella risorsa del set di dati. Il metodo datasets.update non è consigliato perché sostituisce l'intera risorsa del set di dati.

Spark SQL

Utilizza l'istruzione ALTER DATABASE.

Aggiorna le tabelle Iceberg

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo tables.patch e aggiorna il campo ExternalCatalogTableOptions nella risorsa tabella. Il metodo tables.update non è consigliato perché sostituisce l'intera risorsa tabella.

Per aggiornare lo schema o il file di metadati, utilizza il metodo tables.patch e imposta la proprietà autodetect_schema su true:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene la tabella che vuoi aggiornare
  • DATASET_ID: l'ID del set di dati che contiene la tabella che vuoi aggiornare
  • TABLE_ID: l'ID della tabella che vuoi aggiornare

Nel corpo della richiesta, specifica il valore aggiornato per ogni campo. Ad esempio, per aggiornare la posizione dei metadati della tabella Iceberg, specifica il valore aggiornato per il campo metadata_location:

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

Sostituisci METADATA_URI con l'URI Cloud Storage dell'ultimo file di metadati Iceberg. Ad esempio gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Utilizza l'istruzione ALTER TABLE.

Elimina risorse metastore

Le sezioni seguenti descrivono come eliminare le risorse nel metastore BigLake.

Elimina spazi dei nomi

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo datasets.delete. Imposta il parametro deleteContents su true per eliminare le tabelle nel tuo spazio dei nomi.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi

Eliminare le tabelle

Seleziona una delle seguenti opzioni:

API

Utilizza il metodo tables.delete e specifica il nome della tabella. Questo metodo non elimina i file associati in Cloud Storage.

Spark SQL

Per eliminare solo la tabella, utilizza la seguente istruzione:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi
  • TABLE: il nome della tabella da eliminare

Per eliminare la tabella ed eliminare i file associati in Cloud Storage, utilizza la seguente istruzione:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Sostituisci quanto segue:

  • SPARK_CATALOG: il nome del catalogo Spark
  • NAMESPACE: il nome del tuo spazio dei nomi
  • TABLE: il nome della tabella da eliminare

Passaggi successivi