

# 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 Versão 2 (V2), principalmente em relação a atualizações em lote e exclusões de conformidade.

A AWS é compatível com vetores de exclusão, linhagem de linha e o tipo de dados variante, conforme definido na especificação do Apache Iceberg Versão 3 (V3). Você pode usar esses recursos com o Apache Spark no [Amazon EMR](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-emr.html), o [AWS Glue ETL](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-glue.html), os [cadernos do Estúdio Unificado Amazon SageMaker](https://docs.aws.amazon.com/next-generation-sagemaker/) e tabelas do Apache Iceberg no [Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html), incluindo [Tabelas do Amazon S3](https://aws.amazon.com/s3/features/tables/). O tipo de dados variant é específico de Tabelas do S3.

## 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.

Tipo de dados variant  
Com o tipo de dados variant, você pode gravar dados semiestruturados, como JSON, diretamente em tabelas do Iceberg sem definir previamente um esquema fixo. Mecanismos compatíveis com a V3 fragmentam os dados semiestruturados em colunas ocultas durante a gravação, gerando estatísticas de colunas do Parquet que os mecanismos de consulta usam para otimizações, como a eliminação de arquivos. Isso reduz a quantidade de dados examinados pelas consultas analíticas. O serviço Tabelas do S3 fornece manutenção contínua das tabelas para colunas variant, incluindo compactação, para que você possa consolidar dados de fontes semiestruturadas em arquivos maiores que os mecanismos do Iceberg possam ler com eficiência.

## 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.
+ AWSCatálogo do 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 \_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.

### Usar o tipo de dados variant
<a name="using-variant-data-type"></a>

**Importante**  
O tipo de dados variant está disponível somente em regiões da AWS específicas. Consulte a lista completa de regiões compatíveis em [Disponibilidade](#availability).

Com o tipo de dados variant, você pode gravar dados semiestruturados, como JSON, diretamente nas tabelas do Iceberg sem definir previamente um esquema fixo. Você pode gravar dados mais rapidamente e, ao mesmo tempo, obter um desempenho eficiente de consultas analíticas. Mecanismos compatíveis com o Iceberg V3 fragmentam os dados semiestruturados em colunas ocultas durante a gravação. Essas colunas ocultas geram estatísticas de colunas do Parquet que os mecanismos de consulta usam para otimizações, como a eliminação de arquivos.

**Criar uma tabela com uma coluna variant usando o Spark SQL:**

```
CREATE TABLE IF NOT EXISTS myns.events (
    event_id bigint,
    event_timestamp timestamp,
    source string,
    event_data VARIANT
)
USING iceberg
TBLPROPERTIES (
    'format-version' = '3'
)
```

**Inserir dados semiestruturados na coluna variant:**

```
INSERT INTO myns.events VALUES (
    1,
    current_timestamp(),
    'web-app',
    PARSE_JSON('{"user_id": "u-1234", "action": "page_view", "page": "/products", "duration_ms": 350}')
);

INSERT INTO myns.events VALUES (
    2,
    current_timestamp(),
    'mobile-app',
    PARSE_JSON('{"user_id": "u-5678", "action": "purchase", "items": [{"sku": "A100", "qty": 2}], "total": 49.99}')
);
```

Com o Tabelas do S3, a manutenção das tabelas para colunas variant, incluindo a compactação, é executada automaticamente. A compactação consolida dados de fontes semiestruturadas, transformando arquivos pequenos em arquivos maiores que os mecanismos do Iceberg podem ler com mais eficiência, melhorando o desempenho das consultas ao longo do tempo.

## 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.

### Considerações para compactação
<a name="considerations-for-compaction"></a>

Por padrão, a compactação grava arquivos Parquet variant fragmentados. Leitores mais antigos que não são compatíveis com a fragmentação talvez não consigam ler arquivos compactados. É possível desabilitar a fragmentação definindo a propriedade da tabela `write.variant.shredding.enabled=false`.

## Solução de problemas
<a name="troubleshooting"></a>

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

Erro: “"format-version 3 is not supported”  
+ Verifique a compatibilidade do catálogo do mecanismo de consulta com o Iceberg V3.
+ Certifique-se de estar usando as versões mais recentes do serviço da AWS.
+ 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)

  \*Disponibilidade parcial por região

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 do Apache Iceberg V3 para vetores de exclusão e linhagem de linhas está disponível em todas as regiões da AWS nas quais o Amazon EMR, o Catálogo de Dados do AWS Glue, o AWS Glue ETL e o Tabelas do S3 operam.

O tipo de dados variant no S3 Tables está disponível nas seguintes regiões da AWS: Leste dos EUA (Norte da Virgínia), Leste dos EUA (Ohio), Oeste dos EUA (Oregon), Ásia-Pacífico (Mumbai), Ásia-Pacífico (Seul), Ásia-Pacífico (Singapura), Ásia-Pacífico (Sydney), Ásia-Pacífico (Tóquio), Canadá (Central), Europa (Frankfurt), Europa (Irlanda), Europa (Londres), Europa (Paris), Europa (Estocolmo) e América do Sul (São Paulo).

## Recursos adicionais
<a name="additional-resources"></a>
+ [Documentação do Apache Iceberg V](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)