Trabalhar com o Apache Iceberg V3
O Apache Iceberg Versão 3 (V3), a versão mais recente da especificação de formato de tabela Apache Iceberg, introduz recursos avançados para criar data lakes em escala de petabytes com desempenho aprimorado e custos operacionais indiretos reduzidos. A V3 aborda gargalos de desempenho comuns encontrados na V2, principalmente em relação a atualizações em lote e exclusões de conformidade.
A AWS permite o uso de vetores de exclusão e linhagem de linha, conforme definido na especificação do Apache Iceberg Versão 3 (V3). Esses recursos estão disponíveis com o Apache Spark no Amazon EMR 7.12, no Glue ETL, em cadernos do Estúdio Unificado Amazon SageMaker e em tabelas Apache Iceberg no Catálogo de Dados do AWS Glue, inclusive na funcionalidade Tabelas do Amazon S3
Recursos principais na V3
- Vetores de exclusão
-
Substituem os arquivos de exclusão posicional da V2 por um formato binário eficiente armazenado como arquivos Puffin. Isso elimina a amplificação da gravação de atualizações aleatórias em lote e exclusões de conformidade segundo o RGPD, reduzindo significativamente os custos indiretos de manter os dados atualizados. As organizações que processam atualizações de alta frequência verão melhorias imediatas no desempenho de gravação e custos reduzidos de armazenamento com a diminuição do número de arquivos pequenos.
- Linhagem de linha
-
Permite o rastreamento preciso de alterações em nível de linha. Os sistemas subsequentes podem processar alterações de forma incremental, acelerando os pipelines de dados e reduzindo os custos de computação para fluxos de trabalho de captura de dados de alteração (CDC). Esse recurso integrado elimina a necessidade de implementações personalizadas de rastreamento de alterações.
Compatibilidade da versão
A V3 mantém a compatibilidade com versões anteriores de tabelas da V2. Os serviços da AWS aceitam tabelas da V2 e da V3 simultaneamente, permitindo que você:
-
Execute consultas em tabelas da V2 e da V3.
-
Atualize as tabelas existentes da V2 para a V3 sem reescrever dados.
-
Execute consultas de viagem no tempo que abrangem snapshots da V2 e da V3.
-
Use a evolução do esquema e o particionamento oculto nas versões de tabela.
Importante
A V3 é uma atualização unidirecional. Depois que uma tabela é atualizada da V2 para a V3, não é possível fazer downgrade para a V2 por meio de operações padrão.
Conceitos básicos da V3
Pré-requisitos
Antes de trabalhar com tabelas da V3, verifique se você tem:
-
Uma conta da AWS com permissões apropriadas do IAM.
-
Acesso a um ou mais serviços de analytics da AWS (EMR, Glue, cadernos do Estúdio Unificado Amazon SageMaker ou Tabelas do S3).
-
Um bucket do S3 para armazenar dados e metadados de tabela.
-
Um bucket de tabela para começar a usar a funcionalidade Tabelas do S3 ou um bucket do S3 de uso geral se estiver criando sua própria infraestrutura Iceberg.
-
Catálogo do AWS Glue configurado.
Criar tabelas da V3
Criar outras tabelas da V3
Para criar uma tabela do Iceberg V3, defina a propriedade de tabela format-version como 3.
Usar o Spark SQL:
CREATE TABLE IF NOT EXISTS myns.orders_v3 ( order_id bigint, customer_id string, order_date date, total_amount decimal(10,2), status string, created_at timestamp ) USING iceberg TBLPROPERTIES ( 'format-version' = '3' )
Atualizar tabelas da V2 para a V3
É possível atualizar tabelas existentes da V2 para a V3 atomicamente sem reescrever dados.
Usar o Spark SQL:
ALTER TABLE myns.existing_table SET TBLPROPERTIES ('format-version' = '3')
Importante
A V3 é uma atualização unidirecional. Depois que uma tabela é atualizada da V2 para a V3, não é possível fazer downgrade para a V2 por meio de operações padrão.
O que ocorre durante a atualização:
-
Um novo snapshot de metadados é criado atomicamente.
-
Os arquivos de dados Parquet existentes são reutilizados.
-
Campos de linhagem de linha são adicionados aos metadados da tabela.
-
A compactação seguinte remove os arquivos de exclusão antigos da V2.
-
As novas modificações usam os arquivos de vetor de exclusão do V3.
-
A atualização não realiza um preenchimento histórico dos registros de rastreamento de alterações de linhagem de linha.
Habilitar vetores de exclusão
Para utilizar vetores de exclusão para atualizações, exclusões e mesclagens, configure o modo de gravação.
Usar o Spark SQL:
ALTER TABLE myns.orders_v3 SET TBLPROPERTIES ('format-version' = '3', 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' )
Essas configurações garantem que as operações de atualização, exclusão e mesclagem criem arquivos de vetores de exclusão em vez de reescrever arquivos de dados inteiros.
Utilizar a linhagem de linha para rastreamento de alterações
A V3 adiciona automaticamente campos de metadados de linhagem de linha para rastrear alterações.
Usar o Spark SQL:
# Query with parameter value provided last_processed_sequence = 47 SELECT id, data, _row_id, _last_updated_sequence_number FROM myns.orders_v3 WHERE _last_updated_sequence_number > :last_processed_sequence
O campo _row_id identifica exclusivamente cada linha, enquanto _last_updated_sequence_number rastreia quando a linha foi modificada pela última vez. Use esses campos para:
-
Identificar as linhas alteradas para processamento incremental.
-
Rastrear a linhagem de dados para fins de conformidade.
-
Otimizar pipelines de CDC.
-
Reduzir os custos de computação processando somente as alterações.
Práticas recomendadas para a V3
Quando usar a V3
Considere a possibilidade de fazer a atualização ou começar com a V3 quando:
-
Executar atualizações ou exclusões frequentes em lote.
-
Precisar atender a requisitos do RGPD ou de exclusão de conformidade.
-
Suas workloads envolverem atualizações e inserções de alta frequência.
-
Precisar de fluxos de trabalho de CDC eficientes.
-
Quiser reduzir os custos de armazenamento de arquivos pequenos.
-
Precisar de melhores recursos de rastreamento de alterações.
Otimizar o desempenho de gravação
-
Habilite os vetores de exclusão para workloads que requerem muitas atualizações:
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
Configure tamanhos de arquivo apropriados:
SET TBLPROPERTIES ( 'write.target-file-size-bytes' = '536870912' — 512 MB )
Otimizar o desempenho de leitura
-
Utilize a linhagem de linha para processamento incrementa.
-
Use a viagem no tempo para acessar dados históricos sem precisar copiar.
-
Habilite a coleta de estatísticas para melhorar o planejamento de consultas.
Estratégia de migração
Quando migrar da V2 para a V3:
-
Primeiro teste fora da produção: valide o processo de atualização e o desempenho.
-
Atualize durante períodos de baixa atividade: minimize o impacto nas operações simultâneas.
-
Monitore o desempenho inicial: acompanhe as métricas após a atualização.
-
Execute a compactação: consolide os arquivos excluídos após a atualização.
-
Atualize a documentação: evidencie os recursos da V3 na documentação da equipe.
Considerações sobre compatibilidade
-
Versões de mecanismo: garanta que todos os mecanismos que acessam a tabela sejam compatíveis com a V3.
-
Ferramentas de terceiros: verifique a compatibilidade com a V3 antes de atualizar.
-
Estratégia de backup: teste os procedimentos de recuperação baseados em snapshots.
-
Monitoramento: atualize os painéis de monitoramento para métricas específicas da V3.
Solução de problemas
Problemas comuns
- Erro: “"format-version 3 is not supported”
-
-
Verifique se a versão do mecanismo é compatível com a V3.
O suporte à V3 para serviços da AWS é o seguinte:
Serviço Suporte à V3 Spark no EMR Versão 7.12 e posterior AWS Glue ETL Sim Cadernos do Estúdio Unificado Amazon SageMaker Sim AWS Glue: API REST do Iceberg, manutenção de tabelas Sim Tabelas do Amazon S3: API REST do Iceberg, manutenção de tabelas Sim Amazon Athena (Trino) Não -
Verifique a compatibilidade do catálogo.
-
Garanta as versões mais recentes do serviço da AWS.
-
- Degradação do desempenho após a atualização
-
-
Verifique se não há falhas de compactação. Consulte Registro e monitoramento para Tabelas do S3 para ver mais detalhes.
-
Verifique se os vetores de exclusão estão habilitados. As seguintes propriedades devem estar definidas:
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
É possível verificar as propriedades da tabela com o seguinte código:
DESCRIBE FORMATTED myns.orders_v3 -
Analise a estratégia de partição. O particionamento excessivo pode gerar arquivos pequenos. Execute a consulta abaixo para saber qual é o tamanho médio do arquivo para sua tabela:
SELECT avg(file_size_in_bytes) as avg_file_size_bytes FROM myns.orders_v3.files
-
- Incompatibilidade com ferramentas de terceiros
-
-
Verifique se a ferramenta é compatível com a especificação da V3.
-
Considere a possibilidade de manter tabelas da V2 para ferramentas não compatíveis.
-
Entre em contato com o fornecedor da ferramenta para se informar sobre o cronograma de suporte da V3.
-
Receber ajuda
-
AWS Support: entre em contato com o AWS Support para solução de problemas específicos do serviço.
-
Comunidade Apache Iceberg: Iceberg Slack.
-
Documentação da AWS: documentação de analytics da AWS.
Preços
-
Amazon EMR: preços de computação e armazenamento
. -
AWS Glue: preços de execução de trabalhos e do Catálogo de Dados
-
Tabelas do S3: preços de armazenamento e solicitações
Disponibilidade
O suporte ao Apache Iceberg V3 está disponível em todas as regiões da AWS em que o Amazon EMR, o Catálogo de Dados do AWS Glue, o AWS Glue ETL e a funcionalidade Tabelas do S3 operam.