Gestionar recursos en BigLake Metastore

El almacén de metadatos de BigLake es un almacén de metadatos único y compartido que permite compartir datos entre motores de procesamiento de datos, lo que elimina la necesidad de mantener almacenes de metadatos independientes para tus cargas de trabajo de código abierto.

En este documento se explica cómo crear, ver, modificar y eliminar recursos en el metastore de BigLake.

Antes de empezar

  1. Verify that billing is enabled for your Google Cloud project.

    Consulta cómo comprobar si la facturación está habilitada en un proyecto.
  2. Enable the BigQuery, BigQuery Storage, and Dataproc APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  3. Opcional: consulta cómo funciona el metastore de BigLake y por qué deberías usarlo.

Roles obligatorios

Para obtener los permisos que necesitas para gestionar recursos de Iceberg en el metastore de BigLake, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Crear recursos de metastore

En las siguientes secciones se describe cómo crear recursos en el metastore de BigLake.

Crear espacios de nombres

Selecciona una de las opciones siguientes:

API

Usa el método datasets.insert y especifica el campo ExternalCatalogDatasetOptions en el recurso de conjunto de datos que envíes.

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto que contiene el conjunto de datos de destino
  • DATASET_ID: el ID del conjunto de datos de destino
  • URI: el URI de Cloud Storage de todas las tablas del conjunto de datos
  • LOCATION: la ubicación de BigQuery en la que quieres crear el conjunto de datos

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre del nuevo espacio de nombres

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto que contiene el conjunto de datos de destino
  • DATASET_ID: el ID del conjunto de datos de destino
  • LOCATION: la ubicación de BigQuery en la que quieres crear el conjunto de datos
  • URI: el URI de Cloud Storage de todas las tablas del conjunto de datos

Crear tablas Iceberg

Selecciona una de las opciones siguientes:

API

Usa el método tables.insert y especifica el campo ExternalCatalogTableOptions en el recurso de tabla que envíes.

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto que contiene la tabla de destino.
  • DATASET_ID: el ID del conjunto de datos que contiene la tabla de destino.
  • TABLE_ID: el ID de la tabla de destino.
  • METADATA_URI: el URI de Cloud Storage del archivo de metadatos de Iceberg más reciente. Por ejemplo, gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: el ID de tu conexión a Cloud Storage.

Spark SQL

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

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres
  • TABLE: el nombre de la nueva tabla

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

Haz los cambios siguientes:

  • TABLE: el nombre de la tabla de destino.
  • STORAGE_URI: el URI de Cloud Storage donde se almacenan los datos de la tabla, que empieza por gs://.
  • METADATA_URI: el URI de Cloud Storage del archivo de metadatos de Iceberg más reciente. Por ejemplo, gs://mybucket/mytable/metadata/1234.metadata.json.

Ver recursos del metastore

En las siguientes secciones se describe cómo ver recursos en BigLake Metastore.

Ver espacios de nombres

Selecciona una de las opciones siguientes:

API

Usa el método datasets.list para ver todos los espacios de nombres o el método datasets.get para ver información sobre un espacio de nombres definido.

Spark SQL

Para ver todos los espacios de nombres de un catálogo, utiliza la siguiente instrucción:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Sustituye SPARK_CATALOG por el nombre de tu catálogo de Spark.

Para ver información sobre un espacio de nombres definido, utiliza la siguiente instrucción:

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

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres

Ver tablas

Selecciona una de las opciones siguientes:

API

Usa el método tables.list para ver todas las tablas de un espacio de nombres o el método tables.get para ver información sobre una tabla definida.

Spark SQL

Para ver todas las tablas de un espacio de nombres, usa la siguiente instrucción:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres

Para ver información sobre una tabla definida, usa la siguiente instrucción:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres
  • TABLE: el nombre de la tabla

Modificar recursos de metastore

En las siguientes secciones se describe cómo modificar recursos en el metastore de BigLake.

Actualizar espacios de nombres

Selecciona una de las opciones siguientes:

API

Usa el método datasets.patch y actualiza el campo ExternalCatalogDatasetOptions en el recurso de conjunto de datos. No se recomienda usar el método datasets.update porque sustituye todo el recurso del conjunto de datos.

Spark SQL

Usa la instrucción ALTER DATABASE.

Actualizar tablas Iceberg

Selecciona una de las opciones siguientes:

API

Usa el método tables.patch y actualiza el campo ExternalCatalogTableOptions en el recurso de tabla. No se recomienda usar el método tables.update porque sustituye todo el recurso de tabla.

Para actualizar el archivo de esquema o de metadatos, usa el método tables.patch y asigna el valor true a la propiedad autodetect_schema:

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

Haz los cambios siguientes:

  • PROJECT_ID: ID del proyecto que contiene la tabla que quieres actualizar.
  • DATASET_ID: ID del conjunto de datos que contiene la tabla que quieres actualizar.
  • TABLE_ID: el ID de la tabla que quieras actualizar

En el cuerpo de la solicitud, especifique el valor actualizado de cada campo. Por ejemplo, para actualizar la ubicación de los metadatos de la tabla Iceberg, especifica el valor actualizado del campo metadata_location:

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

Sustituye METADATA_URI por el URI de Cloud Storage del archivo de metadatos de Iceberg más reciente. Por ejemplo, gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Usa la instrucción ALTER TABLE.

Eliminar recursos de metastore

En las siguientes secciones se describe cómo eliminar recursos en BigLake Metastore.

Eliminar espacios de nombres

Selecciona una de las opciones siguientes:

API

Usa el método datasets.delete. Asigna el valor true al parámetro deleteContents para eliminar las tablas de tu espacio de nombres.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres

Cómo eliminar tablas

Selecciona una de las opciones siguientes:

API

Usa el método tables.delete y especifica el nombre de la tabla. Este método no elimina los archivos asociados de Cloud Storage.

Spark SQL

Para eliminar solo la tabla, usa la siguiente instrucción:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres
  • TABLE: el nombre de la tabla que se va a eliminar.

Para eliminar la tabla y los archivos asociados en Cloud Storage, usa la siguiente instrucción:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Haz los cambios siguientes:

  • SPARK_CATALOG: el nombre de tu catálogo de Spark
  • NAMESPACE: el nombre de tu espacio de nombres
  • TABLE: el nombre de la tabla que se va a eliminar

Siguientes pasos