

# Usar compactação no Athena
<a name="compression-formats"></a>

O Athena suporta uma variedade de formatos de compactação para leitura e gravação de dados, incluindo a leitura de uma tabela que usa vários formatos de compactação. Por exemplo, o Athena pode ler com sucesso os dados de uma tabela que usa o formato de arquivo Parquet quando alguns arquivos Parquet são compactados com o Snappy e outros arquivos Parquet são compactados com o GZIP. O mesmo princípio se aplica aos formatos de armazenamento ORC, arquivo de texto e JSON.

## Formatos de compactação com suporte
<a name="compression-support-formats"></a>

O Athena aceita os seguintes formatos de compactação:
+ **BZIP2**: formato que usa o algoritmo de Burrows-Wheeler.
+ **DEFLATE**: algoritmo de compactação de dados baseado em codificação [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) e [Huffman](https://en.wikipedia.org/wiki/Huffman_coding). [Deflate](https://en.wikipedia.org/wiki/Deflate) só é relevante para o formato de arquivo Avro.
+ **GZIP**: algoritmo de compactação baseado em Deflate. Para tabelas do Hive no mecanismo do Athena versões 2 e 3, e tabelas do Iceberg no mecanismo do Athena versão 2, o GZIP é o formato de compactação de gravação padrão para arquivos nos formatos de armazenamento de arquivos Parquet e de texto. Arquivos no formato `tar.gz` não são suportados.
+ **LZ4**: este membro da família Lempel-Ziv 77 (LZ7) também se concentra na velocidade de compactação e descompactação, não na compactação máxima dos dados. O LZ4 tem os seguintes formatos de enquadramento:
  + **LZ4 Raw/Unframed**: uma implementação sem quadros padrão do formato de compactação de blocos LZ4. Para obter mais informações, consulte [LZ4 Block Format Description](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md) (Descrição do formato de bloco LZ4) no GitHub.
  + **LZ4 framed**: a implementação de enquadramento usual do LZ4. Para obter mais informações, consulte [LZ4 Frame Format Description](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md) (Descrição do formato de quadro LZ4) no GitHub.
  + **LZ4 Hadoop-compatible**: a implementação do Apache Hadoop do LZ4. Esta implementação envolve a compactação LZ4 com a classe [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java).
+ **LZO**: formato que usa o algoritmo Lempel-Ziv-Oberhumer, que se concentra na alta velocidade de compactação e descompactação, não na compactação máxima dos dados. O LZO tem duas implementações:
  + **Standard LZO**: para obter mais informações, consulte o [resumo](http://www.oberhumer.com/opensource/lzo/#abstract) do LZO no site da Oberhumer.
  + **LZO Hadoop-compatible**: esta implementação envolve o algoritmo LZO com a classe [BlockCompressorStream.java](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java).
+ **SNAPPY**: algoritmo de compactação que faz parte da família Lempel-Ziv 77 (LZ7). O Snappy se concentra na alta velocidade de compactação e descompactação, não na compactação máxima do dados.
+ **ZLIB**: com base no Deflate, ZLIB é o formato de compactação de gravação padrão para arquivos no formato de armazenamento de dados ORC. Para obter mais informações, consulte a página [zib](https://github.com/madler/zlib) no GitHub.
+  **ZSTD**: o [algoritmo de compactação de dados Zstandard](http://facebook.github.io/zstd/) é um algoritmo de compactação rápida que fornece altas taxas de compactação. A biblioteca Zstandard (ZSTD) é fornecida como software de código aberto usando uma licença BSD. O ZSTD é a compactação padrão para tabelas do Iceberg. O Athena usa o nível 3 de compactação ZSTD por padrão quando grava dados compactados como ZSTD. Para obter mais informações sobre o uso de níveis de compactação ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).

**nota**  
O Athena não é compatível com gravação de arquivos compactados Parquet nos formatos LZ4 ou LZO. Ainda há compatibilidade com leituras para esses formatos de compactação.

## Especificar formatos de compactação
<a name="compression-support-specifying-compression-formats"></a>

Ao escrever instruções CREATE TABLE ou CTAS, você pode especificar propriedades de compactação que especifiquem o tipo de compactação a ser usado quando o Athena gravar nessas tabelas.
+ Para CTAS, consulte [Propriedades da tabela CTAS](create-table-as.md#ctas-table-properties). Para obter exemplos, consulte [Exemplos de consultas CTAS](ctas-examples.md).
+ Para CREATE TABLE, consulte [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) para obter uma lista de propriedades da tabela de compactação.

## Especificar nenhuma compactação
<a name="compression-support-specifying-no-compression"></a>

As instruções CREATE TABLE são compatíveis com a gravação de arquivos descompactados. Para gravar arquivos descompactados, use a seguinte sintaxe: 
+ CREATE TABLE (arquivo de texto ou JSON): Em `TBLPROPERTIES`, especifique `write.compression = NONE`.
+ CREATE TABLE (Parquet): em `TBLPROPERTIES`, especifique `parquet.compression = UNCOMPRESSED`.
+ CREATE TABLE (ORC): em `TBLPROPERTIES`, especifique `orc.compress = NONE`.

## Observações e recursos
<a name="compression-support-notes-and-resources"></a>
+ Atualmente, extensões de arquivos em letras maiúsculas, como `.GZ` ou `.BZIP2`, não são reconhecidas pelo Athena. Evite usar conjuntos de dados com extensões de arquivos em letras maiúsculas ou altere essas extensões para letras minúsculas.
+ Para dados em CSV, TSV e JSON, o Athena determina o tipo de compactação com base na extensão do arquivo. Se nenhuma extensão de arquivo estiver presente, o Athena tratará os dados como texto simples sem compactação. Se os dados estiverem compactados, certifique-se de que o nome do arquivo inclua a extensão de compactação, como `gz`.
+ O formato de arquivo ZIP não é compatível.
+ Para consultar os logs do Amazon Data Firehose usando o Athena, os formatos compatíveis incluem a compactação GZIP ou os arquivos ORC com compactação SNAPPY.
+ Para obter mais informações sobre como usar a compactação, consulte a seção 3 (“Compress and split files” [Compactar e dividir arquivos]) da publicação do blog da AWS sobre big data: [Top 10 performance tuning tips for Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) (As dez melhores dicas de ajuste de performance do Amazon Athena).

**Topics**
+ [Especificar formatos de compactação](#compression-support-specifying-compression-formats)
+ [Especificar nenhuma compactação](#compression-support-specifying-no-compression)
+ [Observações e recursos](#compression-support-notes-and-resources)
+ [Compactação de tabelas do Hive](compression-support-hive.md)
+ [Compactação de tabelas do Iceberg](compression-support-iceberg.md)
+ [Níveis de compactação ZSTD](compression-support-zstd-levels.md)

# Usar a compactação de tabelas do Hive
<a name="compression-support-hive"></a>

As opções de compactação de tabelas do Hive no Athena variam de acordo com a versão do mecanismo e o formato do arquivo.

## Suporte à compactação do Hive na versão 3 do mecanismo do Athena
<a name="compression-support-hive-v3"></a>

A tabela a seguir resume o suporte a formatos de compactação na versão 3 do mecanismo no Athena para formatos de arquivo de armazenamento no Apache Hive. O formato de arquivo de texto inclui TSV, CSV, JSON e SerDes personalizado para texto. “Sim” ou “Não” em uma célula se aplicam igualmente às operações de leitura e gravação, exceto quando indicado. Para as finalidades desta tabela, CREATE TABLE, CTAS e INSERT INTO serão consideradas operações de gravação. Para obter mais informações sobre o uso de níveis de compressão ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | Ion | ORC | Parquet | Arquivo de texto | 
| --- | --- | --- | --- | --- | --- | 
| BZIP2 | Sim | Sim | Não | Não | Sim | 
| DEFLATE | Sim | Não | Não | Não | Não | 
| GZIP | Não | Sim | Não | Sim | Sim | 
| LZ4 | Não | Sim | Sim |  Gravação: não Leitura: sim  | Sim | 
| LZO | Não |  Gravação: não Leitura: sim  | Não |  Gravação: não Leitura: sim  |  Gravação: não Leitura: sim  | 
| SNAPPY | Sim | Sim | Sim | Sim | Sim | 
| ZLIB | Não | Não | Sim | Não | Não | 
| ZSTD | Sim | Sim | Sim | Sim | Sim | 
| NONE | Sim | Sim | Sim | Sim | Sim | 

# Usar compactação de tabelas do Iceberg
<a name="compression-support-iceberg"></a>

As opções de compactação das tabelas do Iceberg no Athena variam de acordo com a versão do mecanismo e o formato do arquivo.

## Suporte à compactação do Iceberg na versão 3 do mecanismo do Athena
<a name="compression-support-iceberg-v3"></a>

A tabela a seguir resume o suporte a formatos de compactação na versão 3 do mecanismo no Athena para formatos de arquivo de armazenamento no Apache Iceberg. “Sim” ou “Não” em uma célula se aplicam igualmente às operações de leitura e gravação, exceto quando indicado. Para as finalidades desta tabela, CREATE TABLE, CTAS e INSERT INTO serão consideradas operações de gravação. O formato de armazenamento padrão para o Iceberg no mecanismo do Athena versão 3 é Parquet. O formato de compactação padrão para o Iceberg no mecanismo do Athena versão 3 é ZSTD. Para obter mais informações sobre o uso de níveis de compressão ZSTD no Athena, consulte [Usar níveis de compactação ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | ORC | Parquet (padrão) | 
| --- | --- | --- | --- | 
| BZIP2 | Não | Não | Não | 
| GZIP | Sim | Não | Sim | 
| LZ4 | Não | Sim | Não | 
| SNAPPY | Sim | Sim | Sim | 
| ZLIB | Não | Sim | Não | 
| ZSTD | Sim | Sim | Sim (padrão) | 
| NONE | Sim (especificar None ou Deflate) | Sim | Sim (especificar None ou Uncompressed) | 

# Usar níveis de compactação ZSTD
<a name="compression-support-zstd-levels"></a>

O [algoritmo de compactação de dados em tempo real Zstandard](http://facebook.github.io/zstd/) é um algoritmo de compactação rápida que fornece altas taxas de compactação. A biblioteca Zstandard (ZSTD) é um software de código aberto e usa uma licença BSD. O Athena oferece suporte a leitura e a gravação de dados nos formatos ORC, Parquet e arquivo de texto compactados como ZSTD.

Você pode usar os níveis de compactação ZSTD para ajustar a taxa e a velocidade de compactação de acordo com suas necessidades. A biblioteca ZSTD é compatível com níveis de compactação de 1 a 22. O Athena usa o nível 3 de compactação ZSTD por padrão.

Os níveis de compactação oferecem compensações granulares entre a velocidade e a quantidade de compactação alcançadas. Níveis de compactação mais baixos oferecem maior velocidade, mas tamanhos de arquivo maiores. Por exemplo, você pode usar o nível 1 se a velocidade for mais importante e o nível 22 se o tamanho for mais importante. O nível 3 é adequado para muitos casos de uso e é o padrão. Use níveis maiores que 19 com cuidado, pois eles exigem mais memória. A biblioteca ZSTD também oferece níveis de compactação negativos que ampliam a faixa de velocidade e taxas de compactação. Para obter mais informações, consulte [Zstandard Compression RFC](https://datatracker.ietf.org/doc/html/rfc8478).

A abundância de níveis de compactação oferece oportunidades substanciais para ajustes finos. No entanto, certifique-se de medir seus dados e considerar as desvantagens ao decidir sobre um nível de compactação. Recomendamos usar o nível padrão de 3 ou um nível na faixa de 6 a 9 para uma compensação razoável entre a velocidade de compactação e o tamanho dos dados compactados. Reserve níveis 20 ou mais para casos em que o tamanho é mais importante e a velocidade de compactação não é uma preocupação.

## Considerações e limitações
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

Ao usar o nível de compactação ZSTD no Athena, acesse os seguintes pontos.
+ A propriedade `compression_level` da ZSTD tem suporte apenas no mecanismo Athena versão 3.
+ A propriedade `compression_level` da ZSTD é compatível com as instruções `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` (CTAS) e `UNLOAD`.
+ A propriedade `compression_level` é opcional.
+ A propriedade `compression_level` tem suporte apenas para compactação ZSTD.
+ Os níveis de compactação possíveis são de 1 a 22.
+ O nível de compactação padrão é 3.

Para obter informações sobre suporte à compactação do Apache Hive ZSTD no Athena, consulte [Usar a compactação de tabelas do Hive](compression-support-hive.md). Para obter informações sobre suporte à compactação do Apache Iceberg ZSTD no Athena, consulte [Usar compactação de tabelas do Iceberg](compression-support-iceberg.md).

## Especificar níveis de compactação ZSTD
<a name="compression-support-zstd-levels-specifying"></a>

Para especificar o nível de compactação ZSTD para as instruções `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` e `UNLOAD`, use a propriedade `compression_level`. Para especificar a compactação ZSTD em si, você deve usar a propriedade de compactação individual que a sintaxe da instrução usa.

### ALTER TABLE SET TBLPROPERTIES
<a name="compression-support-zstd-levels-alter-table"></a>

Na cláusula `SET TBLPROPERTIES` da instrução [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md), especifique a compactação ZSTD usando `'write.compression' = ' ZSTD'` ou `'parquet.compression' = 'ZSTD'`. Em seguida, use a propriedade `compression_level` para especificar um valor de 1 a 22 (por exemplo, '`compression_level' = '5'`). Se você não especificar uma propriedade de nível de compactação, o padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-alter-table-example"></a>

O exemplo a seguir modifica a tabela `existing_table` para usar o formato de arquivo Parquet com compactação ZSTD nível 4. Observe que na cláusula `TBLPROPERTIES`, o valor do nível de compactação deve ser inserido como uma string em vez de um número inteiro e, portanto, deve ser inserido entre aspas simples ou duplas.

```
ALTER TABLE existing_table 
SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = '4')
```

### CRIAR TABELA
<a name="compression-support-zstd-levels-create-table"></a>

Na cláusula `TBLPROPERTIES` da instrução [CREATE TABLE](create-table.md), especifique '`write.compression' = 'ZSTD'` ou `'parquet.compression' = 'ZSTD'`, e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como string.. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-create-table-example"></a>

O exemplo a seguir cria uma tabela no formato de arquivo Parquet usando compactação ZSTD nível 4. 

```
CREATE EXTERNAL TABLE new_table ( 
  `col0` string COMMENT '', 
  `col1` string COMMENT '' 
) 
STORED AS PARQUET 
LOCATION 's3://amzn-s3-demo-bucket/' 
TBLPROPERTIES ('write.compression' = 'ZSTD', 'compression_level' = '4')
```

### CREATE TABLE AS (CTAS)
<a name="compression-support-zstd-levels-ctas"></a>

Na cláusula `WITH` da instrução [CREATE TABLE AS](create-table-as.md), especifique `write_compression = 'ZSTD'` ou `parquet_compression = 'ZSTD'`, e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como um inteiro. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-ctas-example"></a>

O exemplo de CTAS a seguir especifica o Parquet como formato de arquivo usando compactação ZSTD nível 4. Observe que, na cláusula `WITH`, o valor do nível de compactação deve ser especificado como um número inteiro, não como uma string.

```
CREATE TABLE new_table  
WITH ( format = 'PARQUET', write_compression = 'ZSTD', compression_level = 4)  
AS SELECT * FROM old_table
```

### UNLOAD
<a name="compression-support-zstd-levels-unload"></a>

Na cláusula `WITH` da instrução [UNLOAD](unload.md), especifique `compression = 'ZSTD'` e, em seguida, use `compression_level = compression_level` e especifique um valor de 1 a 22 como um inteiro. Se a propriedade `compression_level` não for especificada, o nível de compressão padrão será 3.

#### Exemplo
<a name="compression-support-zstd-levels-unload-example"></a>

O exemplo a seguir descarrega os resultados da consulta no local especificado usando o formato de arquivo Parquet, a compactação ZSTD e o nível 4 de compactação ZSTD.

```
UNLOAD (SELECT * FROM old_table) 
TO 's3://amzn-s3-demo-bucket/' 
WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)
```