Faça a gestão de recursos no metastore do BigLake

O metastore do BigLake é um metastore único e partilhado que permite a partilha de dados entre motores de processamento de dados, eliminando a necessidade de manter metastores separados para as suas cargas de trabalho de código aberto.

Este documento explica como criar, ver, modificar e eliminar recursos no metastore do BigLake.

Antes de começar

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

    Saiba como verificar se a faturação está ativada num 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: compreenda como funciona o metastore do BigLake e por que motivo o deve usar.

Funções necessárias

Para receber as autorizações de que precisa para gerir recursos do Iceberg no metastore do BigLake, peça ao seu administrador que lhe conceda as seguintes funções de IAM no seu projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Crie recursos do metastore

As secções seguintes descrevem como criar recursos no metastore do BigLake.

Crie espaços de nomes

Selecione uma das seguintes opções:

API

Use o método datasets.insert e especifique o campo ExternalCatalogDatasetOptions no recurso dataset que transmite.

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

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto que contém o seu conjunto de dados de destino
  • DATASET_ID: o ID do conjunto de dados de destino
  • URI: o URI do Cloud Storage para todas as tabelas no conjunto de dados
  • LOCATION: a localização do BigQuery onde quer criar o conjunto de dados

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu novo espaço de nomes

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 o seguinte:

  • PROJECT_ID: o ID do projeto que contém o seu conjunto de dados de destino
  • DATASET_ID: o ID do conjunto de dados de destino
  • LOCATION: a localização do BigQuery onde quer criar o conjunto de dados
  • URI: o URI do Cloud Storage para todas as tabelas no conjunto de dados

Crie tabelas Iceberg

Selecione uma das seguintes opções:

API

Use o método tables.insert e especifique o campo ExternalCatalogTableOptions no recurso table que transmite.

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

Substitua o seguinte:

  • 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 sua tabela de destino.
  • TABLE_ID: o ID da tabela de destino.
  • METADATA_URI: o URI do Cloud Storage do ficheiro de metadados Iceberg mais recente. Por exemplo, gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: o ID da sua ligação ao Cloud Storage.

Spark SQL

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

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes
  • 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 o seguinte:

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

Veja recursos do metastore

As secções seguintes descrevem como ver recursos no metastore do BigLake.

Veja espaços de nomes

Selecione uma das seguintes opções:

API

Use o método datasets.list para ver todos os espaços de nomes ou use o método datasets.get para ver informações sobre um espaço de nomes definido.

Spark SQL

Para ver todos os espaços de nomes num catálogo, use a seguinte declaração:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

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

Para ver informações sobre um espaço de nomes definido, use a seguinte declaração:

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

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes

Ver tabelas

Selecione uma das seguintes opções:

API

Use o método tables.list para ver todas as tabelas num espaço de nomes ou use o método tables.get para ver informações sobre uma tabela definida.

Spark SQL

Para ver todas as tabelas num espaço de nomes, use a seguinte declaração:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes

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

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes
  • TABLE: o nome da tabela

Modifique recursos do metastore

As secções seguintes descrevem como modificar recursos no metastore do BigLake.

Atualize espaços de nomes

Selecione uma das seguintes opções:

API

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

Spark SQL

Use a declaração ALTER DATABASE.

Atualize tabelas 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 de tabela.

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

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

Substitua o seguinte:

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

No corpo do pedido, especifique o valor atualizado para cada campo. Por exemplo, para atualizar a localização dos metadados da tabela Iceberg, especifique o valor atualizado para o campo:metadata_location

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

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

Spark SQL

Use a declaração ALTER TABLE.

Elimine recursos do metastore

As secções seguintes descrevem como eliminar recursos no metastore do BigLake.

Elimine espaços de nomes

Selecione uma das seguintes opções:

API

Use o datasets.delete método. Defina o parâmetro deleteContents como verdadeiro para eliminar as tabelas no seu espaço de nomes.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes

Elimine tabelas

Selecione uma das seguintes opções:

API

Use o método tables.delete e especifique o nome da tabela. Este método não elimina os ficheiros associados no Cloud Storage.

Spark SQL

Para eliminar apenas a tabela, use a seguinte declaração:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes
  • TABLE: o nome da tabela a eliminar

Para eliminar a tabela e os ficheiros associados no Cloud Storage, use a seguinte declaração:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Substitua o seguinte:

  • SPARK_CATALOG: o nome do seu catálogo do Spark
  • NAMESPACE: o nome do seu espaço de nomes
  • TABLE: o nome da tabela a eliminar

O que se segue?