Gerenciar recursos do Iceberg 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 do Iceberg no BigLake Metastore.
Antes de começar
-
Make sure that billing is enabled for your Google Cloud project.
Saiba como verificar se o faturamento está ativado em um projeto. -
Enable the BigQuery, BigQuery Storage, and Dataproc APIs.
- 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:
-
Editor de dados do BigQuery (
roles/bigquery.dataEditor
) -
Administrador de objetos do Storage (
roles/storage.objectAdmin
)
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 por meio de papéis personalizados ou de 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 destinoDATASET_ID
: o ID do conjunto de dados de destinoURI
: o URI do Cloud Storage de todas as tabelas no conjunto de dadosLOCATION
: 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 SparkNAMESPACE
: 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 destinoDATASET_ID
: o ID do conjunto de dados de destinoLOCATION
: o local do BigQuery em que você quer criar o conjunto de dadosURI
: 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 SparkNAMESPACE
: 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 comgs://
.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 SparkNAMESPACE
: 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 SparkNAMESPACE
: 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 SparkNAMESPACE
: 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 atualizarDATASET_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 do 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 SparkNAMESPACE
: 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 SparkNAMESPACE
: 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 SparkNAMESPACE
: o nome do namespace.TABLE
: o nome da tabela a ser excluída
A seguir
- Saiba mais sobre outros recursos do metastore do BigLake.