

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Otimizando o armazenamento
<a name="best-practices-storage"></a>

Atualizar ou excluir dados em uma tabela Iceberg aumenta o número de cópias de seus dados, conforme ilustrado no diagrama a seguir. O mesmo vale para a execução da compactação: ela aumenta o número de cópias de dados no Amazon S3. Isso porque o Iceberg trata os arquivos subjacentes a todas as tabelas como imutáveis.

![Resultados da atualização ou exclusão de dados em uma tabela Iceberg](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/apache-iceberg-on-aws/images/optimizing-storage.png)


Siga as práticas recomendadas nesta seção para gerenciar os custos de armazenamento.

## Habilite o S3 Intelligent Tiering
<a name="storage-s3-intelligent-tiering"></a>

Use a classe de armazenamento [Amazon S3 Intelligent-Tiering](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intelligent-tiering-overview.html) para mover automaticamente os dados para o nível de acesso mais econômico quando os padrões de acesso mudarem. Essa opção não tem sobrecarga operacional nem impacto no desempenho.  

Observação: não use os níveis opcionais (como Archive Access e Deep Archive Access) no S3 Intelligent-Tiering com tabelas Iceberg. Para arquivar dados, consulte as diretrizes na próxima seção.

[Você também pode usar as regras de [ciclo de vida do Amazon S3 para definir suas próprias regras](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) para mover objetos para outra classe de armazenamento do Amazon S3, como S3 Standard-IA ou S3 One Zone-IA (consulte Transições suportadas e restrições relacionadas na documentação do Amazon S3).](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#lifecycle-general-considerations-transition-sc)

## Arquivar ou excluir instantâneos históricos
<a name="storage-snapshots"></a>

Para cada transação confirmada (inserção, atualização, mesclagem, compactação) em uma tabela Iceberg, uma nova versão ou instantâneo da tabela é criada. Com o tempo, o número de versões e o número de arquivos de metadados no Amazon S3 se acumulam.

É necessário manter instantâneos de uma tabela para recursos como isolamento de instantâneos, reversão de tabelas e consultas de viagem no tempo. No entanto, os custos de armazenamento aumentam com o número de versões que você retém.

A tabela a seguir descreve os padrões de design que você pode implementar para gerenciar custos com base em seus requisitos de retenção de dados.


| **Padrão de design** | **Solução** | **Casos de uso** | 
| --- |--- |--- |
| **Excluir instantâneos antigos** |   Use a [instrução VACUUM](https://docs.aws.amazon.com/athena/latest/ug/vacuum-statement.html) no Athena para remover instantâneos antigos. Essa operação não incorre em nenhum custo computacional.    [Como alternativa, você pode usar o Spark no Amazon EMR AWS Glue ou remover instantâneos. Para obter mais informações, consulte expire\_snapshots na documentação do Iceberg.](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots)   | Essa abordagem exclui instantâneos que não são mais necessários para reduzir os custos de armazenamento. Você pode configurar quantos instantâneos devem ser retidos ou por quanto tempo, com base em seus requisitos de retenção de dados.<br />Essa opção executa uma exclusão definitiva dos instantâneos. Você não pode reverter ou viajar no tempo para instantâneos expirados. | 
| **Defina políticas de retenção para instantâneos específicos** |   Use tags para marcar instantâneos específicos e definir uma política de retenção no Iceberg. Para obter mais informações, consulte [Tags históricas](https://iceberg.apache.org/docs/latest/branching/#historical-tags) na documentação do Iceberg. <br />Por exemplo, você pode reter um snapshot por mês durante um ano usando a seguinte instrução SQL no Spark no Amazon EMR: <pre>ALTER TABLE glue_catalog.db.table <br />CREATE TAG 'EOM-01' AS OF VERSION 30 RETAIN 365 DAYS</pre>   Use o Spark no Amazon EMR AWS Glue ou remova os demais snapshots intermediários não marcados.   | Esse padrão é útil para a conformidade com requisitos comerciais ou legais que exigem que você mostre o estado de uma tabela em um determinado momento no passado. Ao colocar políticas de retenção em instantâneos marcados específicos, você pode remover outros instantâneos (não marcados) que foram criados. Dessa forma, você pode atender aos requisitos de retenção de dados sem reter cada snapshot criado. | 
| **Arquive instantâneos antigos** |   Use as tags do Amazon S3 para marcar objetos com o Spark. (As tags do Amazon S3 são diferentes das tags Iceberg; para obter mais informações, consulte a documentação do [Iceberg](https://iceberg.apache.org/docs/latest/aws/#s3-tags).) Por exemplo: <pre>spark.sql.catalog.my_catalog.s3.delete-enabled=false and \<br />spark.sql.catalog.my_catalog.s3.delete.tags.my_key=to_archive</pre>   Use o Spark no Amazon EMR AWS Glue ou [para](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots) remover instantâneos. Quando você usa as configurações no exemplo, esse procedimento marca objetos e os separa dos metadados da tabela Iceberg em vez de excluí-los do Amazon S3.   Use as regras de ciclo de vida do S3 para fazer a transição de objetos marcados como `to_archive` uma das classes de armazenamento do [S3 Glacier.](https://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html)   Para consultar dados arquivados:   [Restaure os objetos arquivados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html) (essa etapa não é necessária se os objetos tiverem sido transferidos para a classe de armazenamento Amazon Glacier Instant Retrieval).   Use o [procedimento register\_table](https://iceberg.apache.org/docs/latest/spark-procedures/#register_table) no Iceberg para registrar o instantâneo como uma tabela no catálogo.    Para obter instruções detalhadas, consulte a postagem do AWS blog [Melhore a eficiência operacional das tabelas Apache Iceberg criadas nos data lakes do Amazon S3](https://aws.amazon.com/blogs/big-data/improve-operational-efficiencies-of-apache-iceberg-tables-built-on-amazon-s3-data-lakes/).<br />  | Esse padrão permite que você mantenha todas as versões e instantâneos da tabela a um custo menor.<br />Você não pode viajar no tempo ou reverter para instantâneos arquivados sem primeiro restaurar essas versões como novas tabelas. Isso geralmente é aceitável para fins de auditoria.<br />Você pode combinar essa abordagem com o padrão de design anterior, definindo políticas de retenção para instantâneos específicos. | 

## Excluir arquivos órfãos
<a name="storage-orphan-files"></a>

Em determinadas situações, os aplicativos do Iceberg podem falhar antes que você confirme suas transações. Isso deixa os arquivos de dados no Amazon S3. Como não houve confirmação, esses arquivos não serão associados a nenhuma tabela, então talvez seja necessário limpá-los de forma assíncrona.

Para lidar com essas exclusões, você pode usar a [instrução VACUUM](https://docs.aws.amazon.com/athena/latest/ug/vacuum-statement.html) no Amazon Athena. Essa instrução remove instantâneos e também exclui arquivos órfãos. Isso é muito econômico, porque o Athena não cobra pelo custo computacional dessa operação. Além disso, você não precisa agendar nenhuma operação adicional ao usar a `VACUUM` instrução.

Como alternativa, você pode usar o Spark no Amazon EMR AWS Glue ou executar `remove_orphan_files` o procedimento. Essa operação tem um custo computacional e precisa ser programada de forma independente. Para obter mais informações, consulte a [documentação do Iceberg](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files).