Gerenciar recursos no metastore do BigLake

O metastore do BigLake é um metastore único e compartilhado que permite o compartilhamento de dados entre mecanismos de processamento de dados, eliminando a necessidade de manter metastores separados para suas cargas de trabalho de código aberto.

Neste documento, explicamos como criar, visualizar, modificar e excluir recursos no metastore do BigLake.

Antes de começar

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

    Saiba como verificar se o faturamento está ativado em um projeto.
  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: entenda como o BigLake Metastore funciona e por que você deve usá-lo.

Funções exigidas

Para ter as permissões necessárias para gerenciar recursos do Iceberg no metastore do BigLake, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Criar recursos do Metastore

As seções a seguir descrevem como criar recursos no metastore do BigLake.

Criar namespaces

Selecione uma das seguintes opções:

API

Use o método datasets.insert e especifique o campo ExternalCatalogDatasetOptions no recurso do conjunto de dados que você transmite.

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

Substitua:

  • PROJECT_ID: o ID do projeto que contém o conjunto de dados de destino
  • DATASET_ID: o ID do conjunto de dados de destino
  • URI: o URI do Cloud Storage de todas as tabelas no conjunto de dados
  • LOCATION: o local do BigQuery em que você quer criar o conjunto de dados

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do novo namespace.

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

Substitua:

  • PROJECT_ID: o ID do projeto que contém o conjunto de dados de destino
  • DATASET_ID: o ID do conjunto de dados de destino
  • LOCATION: o local do BigQuery em que você quer criar o conjunto de dados
  • URI: o URI do Cloud Storage de todas as tabelas no conjunto de dados

Criar tabelas Iceberg

Selecione uma das seguintes opções:

API

Use o método tables.insert e especifique o campo ExternalCatalogTableOptions no recurso de tabela que você transmite para a API.

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

Substitua:

  • PROJECT_ID: o ID do projeto que contém a tabela de destino.
  • DATASET_ID: o ID do conjunto de dados que contém a tabela de destino.
  • TABLE_ID: o ID da tabela de destino.
  • METADATA_URI: o URI do Cloud Storage do arquivo de metadados do Iceberg mais recente. Por exemplo, gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: o ID da sua conexão com o Cloud Storage.

Spark SQL

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

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.
  • TABLE: o nome da nova tabela

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

Substitua:

  • TABLE: o nome da tabela de destino.
  • STORAGE_URI: o URI do Cloud Storage em que os dados da tabela são armazenados, começando com gs://.
  • METADATA_URI: o URI do Cloud Storage do arquivo de metadados do Iceberg mais recente. Por exemplo, gs://mybucket/mytable/metadata/1234.metadata.json.

Conferir recursos do Metastore

As seções a seguir descrevem como visualizar recursos no metastore do BigLake.

Ver namespaces

Selecione uma das seguintes opções:

API

Use o método datasets.list para conferir todos os namespaces ou o método datasets.get para conferir informações sobre um namespace definido.

Spark SQL

Para conferir todos os namespaces em um catálogo, use a seguinte instrução:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Substitua SPARK_CATALOG pelo nome do seu catálogo do Spark.

Para conferir informações sobre um namespace definido, use a seguinte instrução:

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

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.

Visualizar tabelas

Selecione uma das seguintes opções:

API

Use o método tables.list para conferir todas as tabelas em um namespace ou o método tables.get para conferir informações sobre uma tabela definida.

Spark SQL

Para conferir todas as tabelas em um namespace, use a seguinte instrução:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.

Para conferir informações sobre uma tabela definida, use a seguinte instrução:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.
  • TABLE: o nome da tabela.

Modificar recursos do metastore

As seções a seguir descrevem como modificar recursos no metastore do BigLake.

Atualizar namespaces

Selecione uma das seguintes opções:

API

Use o método datasets.patch e atualize o campo ExternalCatalogDatasetOptions no recurso do conjunto de dados. O método datasets.update não é recomendado porque substitui todo o recurso do conjunto de dados.

Spark SQL

Use a instrução ALTER DATABASE.

Atualizar tabelas do Iceberg

Selecione uma das seguintes opções:

API

Use o método tables.patch e atualize o campo ExternalCatalogTableOptions no recurso de tabela. O método tables.update não é recomendado porque substitui todo o recurso da tabela.

Para atualizar o esquema ou o arquivo de metadados, use o método tables.patch e defina a propriedade autodetect_schema como "true":

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

Substitua:

  • PROJECT_ID: o ID do projeto que contém a tabela que você quer atualizar
  • DATASET_ID: o ID do conjunto de dados que contém a tabela que você quer atualizar.
  • TABLE_ID: o ID da tabela que você quer atualizar.

No corpo da solicitação, especifique o valor atualizado de cada campo. Por exemplo, para atualizar o local dos metadados da tabela Iceberg, especifique o valor atualizado no campo metadata_location:

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

Substitua METADATA_URI pelo URI do Cloud Storage do arquivo de metadados mais recente do Iceberg. Por exemplo, gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Use a instrução ALTER TABLE.

Excluir recursos do Metastore

As seções a seguir descrevem como excluir recursos no metastore do BigLake.

Excluir namespaces

Selecione uma das seguintes opções:

API

Use o método datasets.delete. Defina o parâmetro deleteContents como "true" para excluir as tabelas no seu namespace.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.

Excluir tabelas

Selecione uma das seguintes opções:

API

Use o método tables.delete e especifique o nome da tabela. Esse método não exclui os arquivos associados no Cloud Storage.

Spark SQL

Para descartar apenas a tabela, use a seguinte instrução:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.
  • TABLE: o nome da tabela a ser excluída

Para descartar a tabela e excluir os arquivos associados no Cloud Storage, use a seguinte instrução:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Substitua:

  • SPARK_CATALOG: o nome do catálogo do Spark
  • NAMESPACE: o nome do namespace.
  • TABLE: o nome da tabela a ser excluída

A seguir