É possível usar as opções de tabela no catálogo do ambiente de execução do Lakehouse para ativar a interoperabilidade de gravação de DML do BigQuery e o gerenciamento de tabelas (otimização automática de armazenamento) para suas tabelas do Apache Iceberg.
Para saber mais sobre os formatos de tabela compatíveis e os recursos de ativação no catálogo do ambiente de execução do Lakehouse, consulte Comparar tipos de tabela e Visão geral das tabelas do Apache Iceberg.
Antes de começar
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
-
Ative a API BigLake, se ainda não tiver feito isso.
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis. - Configure o catálogo do ambiente de execução do Lakehouse com o endpoint do catálogo REST do Apache Iceberg.
Funções exigidas
Para receber as permissões necessárias para configurar as opções de tabela, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto e no bucket de armazenamento:
-
Configure as propriedades da tabela no modo de venda de credenciais:
Editor do BigLake (
roles/biglake.editor) - o projeto -
Configure as propriedades da tabela no modo de fornecimento sem credenciais:
- Editor do BigLake (
roles/biglake.editor): o projeto - Usuário de objetos do Storage (
roles/storage.objectUser): o bucket do Cloud Storage
- Editor do BigLake (
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.
Considerações sobre a configuração
Considere os seguintes requisitos e comportamentos padrão ao configurar as opções de tabela:
Tabelas do Iceberg compatíveis
Embora o catálogo do ambiente de execução do Lakehouse seja compatível com tabelas do Apache Iceberg V2 (GA) e V3 (pré-lançamento), os recursos gerenciados (DML do BigQuery e gerenciamento de tabelas) são compatíveis apenas com tabelas do Iceberg V2. As tabelas do Iceberg V1 não são compatíveis. Para fazer upgrade das tabelas V1, consulte Fazer upgrade das tabelas do Iceberg V1 para V2.
Requisito de fornecimento de credenciais
Para ativar o gerenciamento de tabelas, o catálogo do ambiente de execução do Lakehouse precisa ter a venda de credenciais ativada no nível do catálogo. Os jobs em segundo plano de gerenciamento de tabelas usam a conta de serviço de venda de credenciais para autenticar e atualizar os arquivos de dados de armazenamento subjacentes.
Ativar a DML do BigQuery
Ativar as instruções da linguagem de manipulação de dados (DML) do BigQuery permite a interoperabilidade de gravação do BigQuery em tabelas do Apache Iceberg criadas com mecanismos de código aberto.
As instruções compatíveis incluem INSERT, UPDATE, DELETE e MERGE, além de instruções DDL
padrão, como
CREATE TABLE, ALTER TABLE e DROP TABLE, exceto aquelas que
não são compatíveis com tabelas do Apache Iceberg no
BigQuery.
Ativar a DML do BigQuery para novas tabelas
Quando você cria uma tabela no
BigQuery, a DML do BigQuery e o gerenciamento de tabelas são
ativados por padrão. Ao criar uma tabela de mecanismos de código aberto, configure
a propriedade de tabela gcp.biglake.bigquery-dml.enabled = true usando a sintaxe DDL
do mecanismo.
Por exemplo, no Spark SQL:
CREATE TABLE NAMESPACE.TABLE_NAME (id int, data string)
USING ICEBERG
TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
Ativar a DML do BigQuery para tabelas atuais
Para ativar a DML do BigQuery em uma tabela, atualize a propriedade da tabela.
Por exemplo, no Spark SQL:
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
Desativar a DML do BigQuery
Desativar a DML do BigQuery torna a tabela somente leitura para o BigQuery e interrompe o gerenciamento de tabelas.
Por exemplo, no Spark SQL:
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = false);
Ativar o gerenciamento de tabelas
O gerenciamento de tabelas automatiza processos em segundo plano para otimizar o armazenamento e gerenciar o ciclo de vida de dados e metadados, como compactação e coleta de lixo.
O gerenciamento de tabelas permite realizar as seguintes operações:
Expiração de snapshot e coleta de lixo: a expiração de snapshot gerencia a retenção e a exclusão de arquivos de dados e metadados de snapshots de tabela. Isso é executado automaticamente em segundo plano após qualquer mutação de dados. Os snapshots expiram com base nas propriedades da tabela do Iceberg configuradas pelo usuário
history.expire.max-snapshot-age-msehistory.expire.min-snapshots-to-keepna tabela. Ele remove entradas de snapshot expiradas criando uma definição de snapshot adicional em um novo arquivo de metadados que omite referências aos snapshots removidos.Limitação: a expiração do snapshot e a coleta de lixo associada são ignoradas se a tabela usa tags ou ramificações. Saiba mais em Limitações.
Limitação: a remoção de arquivos órfãos não é processada pelo gerenciamento de tabelas. Saiba mais em Limitações.
Coalesce (compactação): o Coalesce é responsável por manter o formato dos dados, mesclando arquivos pequenos em arquivos maiores. A coalescência é executada automaticamente em segundo plano após qualquer mutação de dados. Os arquivos serão selecionados para compactação se o tamanho médio descompactado for inferior a 50% do tamanho do arquivo de destino de 256 MB. Cada operação de união produz um novo snapshot de tabela. Os jobs de união normalmente são interrompidos e repetidos após qualquer operação de DML em execução. No entanto, para evitar a falta indefinida de otimização de armazenamento, um job de coalescência é acionado à força a cada 24 horas se os dados forem qualificados para coalescência.
Monitoramento de jobs de gerenciamento de tabelas: todos os jobs de gerenciamento de tabelas em segundo plano são registrados na visualização
INFORMATION_SCHEMA.JOBSno BigQuery. É possível consultar essa visualização para rastrear essas operações, de maneira semelhante a como você monitora outros jobs do BigQuery. Para mais informações sobre como consultar informações de jobs, consulte Receber jobs de otimização de armazenamento do Iceberg.A frequência dos jobs de gerenciamento de tabelas está diretamente relacionada à atividade de mutação de dados. Inserções ou atualizações pequenas e frequentes acionam tarefas em segundo plano com mais frequência. Pode haver períodos sem jobs em segundo plano se não houver gravações na tabela. Por outro lado, altos volumes de gravação podem resultar em uma atividade de job mais visível em
INFORMATION_SCHEMA.
Escolher se você quer ativar o gerenciamento de tabelas
Para tabelas do Apache Iceberg gerenciadas pelo catálogo do ambiente de execução do Lakehouse e disponibilizadas pelo endpoint do catálogo REST do Apache Iceberg, é possível ativar o gerenciamento de tabelas ou gerenciar a manutenção de tabelas (como compactação e expiração de snapshots) por conta própria usando mecanismos de código aberto ou de terceiros.
Ative o gerenciamento de tabelas (gcp.biglake.table-management.enabled = true) quando todas
as condições a seguir forem atendidas:
Você quer compactação automática de arquivos em segundo plano (coalesce), expiração automática de snapshots e coleta de lixo após gravações de streaming de DML ou de código aberto.
Seu catálogo usa o modo de venda de credenciais.
Uma janela de retenção de snapshots e de viagem no tempo de até sete dias (cinco dias por padrão) atende aos seus requisitos.
Sua tabela atende aos requisitos de recursos gerenciados (consulte Limitações).
Mantenha o gerenciamento de tabelas desativado (o padrão para tabelas criadas com base em mecanismos de código aberto ou defina gcp.biglake.table-management.enabled = false) e gerencie a manutenção de tabelas por conta própria quando qualquer uma das seguintes condições se aplicar:
Você executa procedimentos personalizados de compactação ou manutenção em mecanismos de código aberto, como Apache Spark, Apache Flink ou Trino, especialmente se as tabelas dependem de layouts de ordenação em Z ou classificação linear que a coalescência não preserva.
Suas tabelas usam tags ou ramificações de snapshot do Apache Iceberg (que fazem com que o gerenciamento de tabelas pule a expiração do snapshot) ou exigem retenção de snapshot e viagem no tempo por mais de 7 dias.
Seu catálogo usa credenciais de usuário final (permissões diretas do Identity and Access Management (IAM) do Cloud Storage) em vez do modo de venda de credenciais.
As tabelas usam recursos que não são compatíveis com os recursos gerenciados (nesse caso, o gerenciamento de tabelas e a DML do BigQuery precisam permanecer desativados), como o Apache Iceberg versão 3, o modo de mesclagem na leitura, o particionamento de várias colunas ou
IDENTITYou caminhos personalizados de armazenamento de dados e metadados. Para ver uma lista completa de recursos sem suporte, consulte Limitações.
Ativar o gerenciamento de tabelas para novas tabelas
Quando você cria uma tabela no BigQuery, a DML e o gerenciamento de tabelas são ativados por padrão. Ao
criar uma tabela de mecanismos de código aberto, configure a
propriedade gcp.biglake.table-management.enabled. A ativação do gerenciamento de tabelas
ativa automaticamente a DML do BigQuery, se ainda não estiver ativada.
Por exemplo, no Spark SQL:
CREATE TABLE NAMESPACE.TABLE_NAME (id int, data string)
USING ICEBERG
TBLPROPERTIES ('gcp.biglake.table-management.enabled' = true);
Ativar o gerenciamento de tabelas para tabelas atuais
Para ativar o gerenciamento de tabelas em uma tabela, atualize a propriedade da tabela.
Spark SQL
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.table-management.enabled' = true);
BigQuery
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET OPTIONS (`properties.gcp.biglake.table-management` = "enabled");
Desativar o gerenciamento de tabelas
A desativação do gerenciamento de tabelas impede que futuros jobs de otimização em segundo plano sejam enfileirados, embora os jobs ativos em andamento sejam concluídos. A desativação do gerenciamento de tabelas não desativa a DML do BigQuery.
Spark SQL
ALTER TABLE NAMESPACE.TABLE_NAME
SET TBLPROPERTIES ('gcp.biglake.table-management.enabled' = false);
BigQuery
ALTER TABLE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET OPTIONS (`properties.gcp.biglake.table-management` = "disabled");
Limitações
As limitações dos recursos gerenciados (como interoperabilidade de gravação do BigQuery e gerenciamento de tabelas) incluem:
Limitações gerais
- Os recursos gerenciados só são compatíveis com tabelas do Apache Iceberg criadas no catálogo do ambiente de execução do Lakehouse usando o endpoint do catálogo REST do Apache Iceberg.
- Todas as limitações atuais das tabelas do Apache Iceberg gerenciadas pelo BigQuery se aplicam a operações com recursos gerenciados ativados.
- Os recursos gerenciados não são compatíveis com tabelas com o Apache Iceberg format-version 3. Somente as tabelas de versão de formato 2 (especificação Iceberg v2) podem ser ativadas para recursos gerenciados.
- Os recursos gerenciados não são compatíveis com tabelas que têm particionamento avançado, como particionamento por
STRING, particionamento de várias colunas ou evolução de partição. - Os recursos gerenciados não são compatíveis com tabelas configuradas com ordens de classificação (por exemplo, usando o procedimento
WRITE ORDER BYou definindowrite.distribution.mode = range). - Os recursos gerenciados não são compatíveis com tabelas Iceberg v2 que usam o modo de mesclagem na leitura. Somente as tabelas que usam o modo de atualização, exclusão e mesclagem de cópia na gravação podem ser ativadas para recursos gerenciados.
- Os recursos gerenciados não são compatíveis com arquivos de dados compactados usando os codecs
gzip,lz4oubrotli(write.parquet.compression-codec). Somente os tipos de compactaçãozstdesnappysão compatíveis com arquivos de dados. - Os recursos gerenciados não são compatíveis com tabelas se o esquema contém
identificadores de chave primária aninhados (
identifier-field-ids) que fazem referência a caminhos ou campos aninhados em uma estrutura. - Os recursos gerenciados não são compatíveis com tabelas que têm dados personalizados ou
locais de metadados (
write.data.pathewrite.metadata.path). O local padrão do bucket do Cloud Storage é necessário para armazenar dados e arquivos de metadados. - O clustering do BigQuery não é compatível com tabelas do Apache Iceberg gerenciadas pelo catálogo do ambiente de execução do Lakehouse.
- Se uma tabela for criada com o tipo de dados
NUMERICno BigQuery, as atualizações de esquema do Spark vão falhar porque o Spark lêNUMERICcomoNUMERIC(38,9). Como solução alternativa, ao criar tabelas com o tipoNUMERICno BigQuery, defina explicitamente a precisão comoNUMERIC(38,9). - Problema conhecido: não é possível remover uma coluna no BigQuery usando DDL
(
ALTER TABLE ... DROP COLUMN) e, em seguida, adicionar novamente uma coluna com o mesmo nome.
Limitações com a viagem no tempo
- Quando o gerenciamento de tabelas está ativado, o valor máximo permitido para a
propriedade
history.expire.max-snapshot-age-msé de 30 dias (2592000000ms), e o valor máximo recomendado é de 7 dias (604800000ms). O valor máximo permitido para a propriedadehistory.expire.min-snapshots-to-keepé100. - As configurações do BigQuery no nível do projeto ou do conjunto de dados para viagem no tempo não se aplicam. Somente as propriedades e os padrões da tabela do Iceberg estão ativos.
Limitações com o gerenciamento de tabelas
- A expiração do snapshot é ignorada para toda a tabela se ela tiver snapshots com tags ou ramificações. A retenção personalizada definida usando
ALTER... RETAIN x DAYSé ignorada, e todos os valores definidos para a propriedadehistory.expire.max-ref-age-mssão ignorados. Os mecanismos de código aberto ainda podem realizar a expiração de snapshots. - O gerenciamento de tabelas não expira esquemas ou especificações de partição. O arquivo
metadata.jsonretém o histórico completo de esquemas e especificações de partição, mesmo que nenhum snapshot se refira a esses IDs de esquema. Os arquivos órfãos criados pelo BigQuery ou por mecanismos de código aberto não são limpos pelo gerenciamento de tabelas. Os mecanismos de código aberto podem realizar a limpeza de arquivos órfãos (por exemplo, usando o procedimento
remove_orphan_filesdo Spark com a opçãoprefix_listingdefinida comotrue).O Coalesce não é compatível com a ordenação em Z e a classificação linear. Se a tabela contiver essas propriedades, não há garantia de que o layout será mantido após a execução do coalesce. Se as tabelas tiverem essas propriedades, não ative o gerenciamento de tabelas.
Limitações com particionamento
- Ao criar ou registrar tabelas de mecanismos de código aberto, os recursos gerenciados
só oferecem suporte ao particionamento nos tipos de campo
DATE,DATETIMEeTIMESTAMPcom transformaçõeshour,day,montheyear(exceto para a transformaçãohourem camposDATE) e tipos de campoINTEGER. - Os recursos gerenciados não são compatíveis com tabelas que têm transformações
IDENTITY. É preciso especificar explicitamente a transformação. - Os comandos
CREATE OR REPLACEem tabelas com recursos gerenciados só são compatíveis se usarem a mesma especificação de partição. As seguintes substituições não são compatíveis:- Substituir uma tabela não particionada por uma tabela particionada.
- Substituir uma tabela particionada por uma não particionada.
- Substituir uma tabela particionada por uma tabela que usa uma especificação de particionamento diferente.
- Não é possível nomear campos de partição personalizados. As tabelas criadas ou registradas
em mecanismos de código aberto precisam seguir a convenção de nomenclatura de campo de partição padrão
do mecanismo (anexando
_e o nome da transformação, como_hour,_day,_monthou_year). Por exemplo, para um campo chamadotime_dateusando a transformaçãoDAY, o valor esperado do campo de partição é:json { "field-id": 1, "source-id": 1, "name": "time_date_day", "transform": transform }
Limitações com propriedades personalizadas de tabelas do Iceberg
As seguintes propriedades de comportamento de tabela não podem ser configuradas com valores não padrão quando os recursos gerenciados estão ativados. Os valores padrão são codificados quando qualquer recurso gerenciado é ativado:
| Propriedade | Valor padrão | Detalhes |
|---|---|---|
format-version |
2 |
Os recursos gerenciados só são compatíveis com tabelas do Iceberg v2. |
write.format.default |
parquet |
As tabelas só aceitam arquivos de dados no formato Parquet. |
write.data.path |
table location + /data |
O caminho padrão do bucket do Cloud Storage configurado para o endpoint do catálogo REST do Apache Iceberg é usado para gravar arquivos de dados. |
write.metadata.path |
table location + /metadata |
O caminho padrão do bucket do Cloud Storage configurado para o endpoint do catálogo REST do Apache Iceberg é usado para gravar arquivos de metadados. |
write.delete.mode |
copy-on-write |
As gravações do BigQuery e os jobs de gerenciamento de tabelas só aceitam cópia na gravação. |
write.update.mode |
copy-on-write |
As gravações do BigQuery e os jobs de gerenciamento de tabelas só aceitam cópia na gravação. |
write.merge.mode |
copy-on-write |
As gravações do BigQuery e os jobs de gerenciamento de tabelas só aceitam cópia na gravação. |
write.delete.isolation-level |
Detecção de conflitos rigorosa | As mudanças que modificam o arquivo metadata.json (incluindo conflitos de dados, conflitos de metadados, leituras fantasmas ou gravações simultâneas não conflitantes) fazem com que a transação simultânea falhe e seja repetida. |
write.update.isolation-level |
Detecção de conflitos rigorosa | Mesmo comportamento de write.delete.isolation-level. |
write.merge.isolation-level |
Detecção de conflitos rigorosa | Mesmo comportamento de write.delete.isolation-level. |
As propriedades a seguir podem ser configuradas ao criar ou alterar tabelas de mecanismos de código aberto:
| Propriedade | Valor padrão | Detalhes |
|---|---|---|
write.parquet.compression-codec |
zstd |
As gravações e a otimização de armazenamento do BigQuery só são compatíveis com os formatos de compactação zstd e snappy. Outros formatos de compactação (como gzip, brotli e lz4) não são compatíveis. |
write.metadata.compression-codec |
null |
Pode ser configurado como null ou gzip. |
history.expire.max-snapshot-age-ms |
432000000 (5 dias) |
Pode ser configurado como qualquer número inteiro não negativo até 2592000000 (30 dias) quando o gerenciamento de tabelas está ativado, com até 7 dias (604800000 ms) recomendados. Os jobs de gerenciamento de tabelas excluem snapshots mais antigos que a duração especificada. |
history.expire.min-snapshots-to-keep |
1 |
Pode ser configurado como qualquer número inteiro positivo até 100 quando o gerenciamento de tabelas está ativado. Os jobs de gerenciamento de tabelas retêm pelo menos esse número de snapshots. |
Outras propriedades de gravação do Apache Iceberg, como write.target-file-size-bytes
e write.parquet.page-size-bytes, podem ser configuradas em mecanismos de código aberto,
mas as gravações do BigQuery e os jobs de gerenciamento de tabelas podem não estar em conformidade
com elas.
A seguir
- Saiba como modificar dados com a DML do BigQuery.
- Saiba como consultar uma tabela.