Modificar dados com instruções DML

Com a modificação de dados, é possível atualizar, excluir, mesclar e truncar registros nas tabelas do Apache Iceberg no catálogo de ambiente de execução do lakehouse.

Quando a DML do BigQuery está ativada na sua tabela, é possível executar instruções DML padrão do BigQuery com mecanismos de código aberto, como Spark e Trino, alcançando interoperabilidade de gravação completa em uma única cópia de dados armazenados no Cloud Storage.

Antes de começar

  1. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  2. Ative a API BigLake.

    Funções necessárias para ativar APIs

    Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (roles/serviceusage.serviceUsageAdmin), que contém a permissão serviceusage.services.enable. Saiba como conceder papéis.

    Ativar a API

  3. Configure o catálogo de ambientes de execução do Lakehouse com o endpoint do catálogo REST do Apache Iceberg.

Funções exigidas

Para ter as permissões necessárias para modificar dados em uma tabela, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto e no bucket de armazenamento:

  • Gravar dados da tabela no modo de venda de credenciais: Editor do BigLake (roles/biglake.editor): o projeto
  • Grave dados da tabela no modo sem fornecimento de credenciais:
    • Editor do BigLake (roles/biglake.editor): o projeto
    • Usuário de objetos do Storage (roles/storage.objectUser): o bucket do Cloud Storage

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.

Recursos e suporte de tabelas

Ao usar tabelas no catálogo de tempo de execução do lakehouse, é útil entender os diferentes tipos de tabelas e os recursos de ativação. Para saber mais sobre o uso de tabelas do Apache Iceberg, consulte Visão geral das tabelas do Apache Iceberg.

Tabelas do Iceberg compatíveis

Somente tabelas do Apache Iceberg V2 (GA) e V3 (pré-lançamento) são compatíveis. Não há suporte para tabelas do Iceberg V1. Para fazer upgrade das tabelas V1 atuais, consulte Fazer upgrade das tabelas Iceberg V1 para V2.

Usar opções de tabela (prévia)

É possível ativar o uso de recursos gerenciados do BigQuery, como a linguagem de manipulação de dados (DML) do BigQuery e o gerenciamento automático de tabelas, configurando propriedades específicas da tabela. Esses recursos são ativados de maneiras diferentes, dependendo de onde a tabela é criada:

  • No BigQuery:a DML do BigQuery e o gerenciamento automático de tabelas são ativados por padrão.
  • De mecanismos de código aberto:para ativar, configure explicitamente as propriedades da tabela. Consulte Configurar opções de tabela para mais informações.

Atualizar dados

Atualize as linhas existentes na tabela:

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;

BigQuery

UPDATE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET data = "updated row"
WHERE id = 1;

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • CATALOG_ID: o ID do catálogo de ambientes de execução do Lakehouse.
  • NAMESPACE: o nome do namespace do Iceberg.
  • TABLE_NAME: o nome da sua tabela Iceberg.

Excluir dados

Exclua linhas específicas da tabela:

Spark

ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

DELETE FROM TABLE_NAME WHERE id = 1;

Trino

ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

DELETE FROM TABLE_NAME WHERE id = 1;

BigQuery

DELETE FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
WHERE id = 1;

Mesclar dados

Mesclar dados de uma tabela de origem na tabela de destino do Iceberg:

Spark

ALTER TABLE TARGET_TABLE SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

Trino

ALTER TABLE TARGET_TABLE SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';

MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (s.id, s.data);

BigQuery

MERGE `PROJECT_ID.CATALOG_ID.NAMESPACE.TARGET_TABLE` t
USING `PROJECT_ID.CATALOG_ID.NAMESPACE.SOURCE_TABLE` s
ON t.id = s.id
WHEN MATCHED THEN
  UPDATE SET data = s.data
WHEN NOT MATCHED THEN
  INSERT (id, data) VALUES (id, data);

A seguir