

# Trabalhar com o Apache Iceberg V3
<a name="working-with-apache-iceberg-v3"></a>

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](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-emr.html), no [ Glue ETL](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-glue.html), em [cadernos do Estúdio Unificado Amazon SageMaker](https://docs.aws.amazon.com/next-generation-sagemaker/) e em tabelas Apache Iceberg no [Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html), inclusive na funcionalidade [Tabelas do Amazon S3](https://aws.amazon.com/s3/features/tables/).

## Recursos principais na V3
<a name="key-features-v3"></a>

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 name="version-compatibility"></a>

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
<a name="getting-started-v3"></a>

### Pré-requisitos
<a name="prerequisites"></a>

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
<a name="creating-v3-tables"></a>

#### Criar outras tabelas da V3
<a name="creating-new-v3-tables"></a>

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
<a name="upgrading-v2-to-v3"></a>

É 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
<a name="enabling-deletion-vectors"></a>

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 name="leveraging-row-lineage"></a>

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 \$1row\$1id identifica exclusivamente cada linha, enquanto \$1last\$1updated\$1sequence\$1number 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
<a name="best-practices-v3"></a>

### Quando usar a V3
<a name="when-to-use-v3"></a>

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
<a name="optimizing-write-performance"></a>
+ 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
<a name="optimizing-read-performance"></a>
+ 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
<a name="migration-strategy"></a>

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
<a name="compatibility-considerations"></a>
+ 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
<a name="troubleshooting"></a>

### Problemas comuns
<a name="common-issues"></a>

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:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/working-with-apache-iceberg-v3.html)
+ 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-monitoring-overview.html) 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
<a name="getting-help"></a>
+ 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
<a name="pricing"></a>
+ Amazon EMR: [preços de computação e armazenamento](https://aws.amazon.com/emr/pricing/).
+ [Preço do Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/)
+ AWS Glue: [preços de execução de trabalhos e do Catálogo de Dados](https://aws.amazon.com/glue/pricing/)
+ Tabelas do S3: [preços de armazenamento e solicitações](https://aws.amazon.com/s3/pricing/)

## Disponibilidade
<a name="availability"></a>

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.

## Recursos adicionais
<a name="additional-resources"></a>
+ [Documentação do Apache Iceberg V3](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/introduction.html)
+ [Práticas recomendadas de migração](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)
+ [Guia de conceitos básicos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-getting-started.html)