Administra recursos de Iceberg en BigLake Metastore

BigLake Metastore es un metastore único y compartido que permite el uso compartido de datos en los motores de procesamiento de datos, lo que elimina la necesidad de mantener metastores separados para tus cargas de trabajo de código abierto.

En este documento, se explica cómo crear, ver, modificar y borrar recursos de Iceberg en BigLake Metastore.

Antes de comenzar

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

    Obtén información para verificar si la facturación está habilitada en un proyecto.
  2. Enable the BigQuery, BigQuery Storage, and Dataproc APIs.

    Enable the APIs

  3. Opcional: Comprende cómo funciona BigLake Metastore y por qué deberías usarlo.

Roles obligatorios

Para obtener los permisos que necesitas para administrar recursos de Iceberg en el metastore de BigLake, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Crea recursos del almacén de metadatos

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

Crea espacios de nombres

Selecciona una de las siguientes opciones:

API

Usa el método datasets.insert y especifica el campo ExternalCatalogDatasetOptions en el recurso del conjunto de datos que pasas.

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que contiene tu conjunto de datos de destino.
  • DATASET_ID: ID de tu conjunto de datos de destino
  • URI: El URI de Cloud Storage para todas las tablas del conjunto de datos
  • LOCATION: La ubicación de BigQuery en la que deseas crear el conjunto de datos

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Reemplaza lo siguiente:

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

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que contiene tu conjunto de datos de destino.
  • DATASET_ID: ID de tu conjunto de datos de destino
  • LOCATION: La ubicación de BigQuery en la que deseas crear el conjunto de datos
  • URI: El URI de Cloud Storage para todas las tablas del conjunto de datos

Crea tablas de Iceberg

Selecciona una de las siguientes opciones:

API

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

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

Reemplaza lo siguiente:

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

Spark SQL

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

Reemplaza lo siguiente:

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

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

Reemplaza lo siguiente:

  • TABLE: Es el nombre de la tabla de destino.
  • STORAGE_URI: Es el URI de Cloud Storage en el que se almacenan los datos de la tabla, que comienza con gs://.
  • METADATA_URI: El URI de Cloud Storage para el archivo de metadatos de Iceberg más reciente. Por ejemplo, gs://mybucket/mytable/metadata/1234.metadata.json.

Visualiza recursos del almacén de metadatos

En las siguientes secciones, se describe cómo ver los recursos en el almacén de metadatos de BigLake.

Cómo ver los espacios de nombres

Selecciona una de las siguientes opciones:

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 en un catálogo, usa la siguiente instrucción:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

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

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

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

Reemplaza lo siguiente:

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

Ver tablas

Selecciona una de las siguientes opciones:

API

Usa el método tables.list para ver todas las tablas en 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 en un espacio de nombres, usa la siguiente instrucción:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Reemplaza lo siguiente:

  • SPARK_CATALOG: Es el nombre de tu catálogo de Spark.
  • NAMESPACE: Es 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;

Reemplaza lo siguiente:

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

Modifica los recursos del almacén de metadatos

En las siguientes secciones, se describe cómo modificar los recursos en BigLake Metastore.

Actualiza los espacios de nombres

Selecciona una de las siguientes opciones:

API

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

Spark SQL

Usa la sentencia ALTER DATABASE.

Actualiza tablas de Iceberg

Selecciona una de las siguientes opciones:

API

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

Para actualizar el esquema o el archivo de metadatos, usa el método tables.patch y establece la propiedad autodetect_schema como verdadera:

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

Reemplaza lo siguiente:

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

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

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

Reemplaza 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 sentencia ALTER TABLE.

Borra los recursos del almacén de metadatos

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

Borra espacios de nombres

Selecciona una de las siguientes opciones:

API

Usa el método datasets.delete. Establece el parámetro deleteContents en verdadero para borrar las tablas de tu espacio de nombres.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Reemplaza lo siguiente:

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

Borra las tablas

Selecciona una de las siguientes opciones:

API

Usa el método tables.delete y especifica el nombre de la tabla. Con este método, no se borran los archivos asociados en Cloud Storage.

Spark SQL

Para descartar la tabla, usa la siguiente instrucción:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Reemplaza lo siguiente:

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

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

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Reemplaza lo siguiente:

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

¿Qué sigue?