

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation de la compression dans Athena
<a name="compression-formats"></a>

Athena prend en charge divers formats de compression pour la lecture et l'écriture de données, y compris la lecture d'une table qui utilise plusieurs formats de compression. Par exemple, Athena peut lire avec succès les données d’une table qui utilise le format de fichier Parquet lorsque certains fichiers Parquet sont compressés avec Snappy et d’autres fichiers Parquet sont compressés avec GZIP. Le même principe s’applique aux formats de stockage ORC, fichier texte et JSON.

## Formats de compression pris en charge
<a name="compression-support-formats"></a>

Athena prend en charge les formats de compression suivants :
+ **BZIP2** – Format qui utilise l'algorithme Burrows-Wheeler.
+ **DEFLATE** – Algorithme de compression basé sur [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) et sur le [codage Huffman](https://en.wikipedia.org/wiki/Huffman_coding). [Deflate](https://en.wikipedia.org/wiki/Deflate) n'est pertinent que pour le format de fichier Avro.
+ **GZIP** – Algorithme de compression basé sur Deflate. Pour les tables Hive dans les versions 2 et 3 du moteur Athena, et les tables Iceberg dans la version 2 du moteur Athena, GZIP est le format de compression d’écriture par défaut des fichiers aux formats de stockage de fichier texte et Parquet. Les fichiers au format `tar.gz` ne sont pas pris en charge.
+ **LZ4**— Ce membre de la famille Lempel-Ziv 77 (LZ7) met également l'accent sur la vitesse de compression et de décompression plutôt que sur la compression maximale des données. LZ4 possède les formats de cadrage suivants :
  + **LZ4 Raw/Unframed — Implémentation** standard non encadrée du format de compression par blocs. LZ4 Pour plus d'informations, consultez la [description du format de LZ4 bloc](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md) sur GitHub.
  + **LZ4 framed** — Implémentation de cadrage habituelle de. LZ4 Pour plus d'informations, consultez la [description du format de LZ4 cadre](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md) sur GitHub.
  + **LZ4 compatible avec hadoop** — Implémentation d'Apache Hadoop de. LZ4 Cette implémentation permet d'encapsuler LZ4 la compression avec la 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** – Format utilisant l'algorithme Lempel–Ziv–Oberhumer, qui se concentre sur une vitesse de compression et de décompression élevée plutôt que sur la compression maximale des données. LZO a deux implémentations :
  + **LZO standard** – Pour en savoir plus sur, consultez le [résumé](http://www.oberhumer.com/opensource/lzo/#abstract) LZO sur le site web d'Oberhumer.
  + **Compatible avec Hadoop LZO** [— Cette implémentation intègre l'algorithme LZO à la classe .java. BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)
+ **SNAPPY** — Algorithme de compression appartenant à la famille Lempel-Ziv 77 (). LZ7 Snappy met l'accent sur une vitesse de compression et de décompression élevée plutôt que sur la compression maximale des données.
+ **ZLIB** – Basé sur Deflate, ZLIB est le format de compression en écriture par défaut pour les fichiers au format de stockage de données ORC. Pour plus d'informations, consultez la page [zlib](https://github.com/madler/zlib) sur GitHub.
+  **ZSTD** – L'[algorithme de compression de données en temps réel Zstandard](http://facebook.github.io/zstd/) est un algorithme de compression rapide qui fournit des taux de compression élevés. La bibliothèque Zstandard (ZSTD) est fournie sous forme de logiciel open source utilisant une licence BSD. ZSTD est la compression par défaut pour les tables Iceberg. Lors de l’écriture de données compressées ZSTD, Athena utilise par défaut le niveau 3 de compression ZSTD. Pour plus d’informations sur l’utilisation des niveaux de compression ZSTD dans Athena, consultez [Utilisation des niveaux de compression ZSTD](compression-support-zstd-levels.md).

**Note**  
Athena ne prend pas en charge l'écriture de fichiers Parquet compressés au format LZ4 LZO. La lecture de ces formats de compression est prise en charge.

## Spécification de formats de compression
<a name="compression-support-specifying-compression-formats"></a>

Lorsque vous écrivez des instructions CREATE TABLE ou CTAS, vous pouvez spécifier des propriétés de compression qui précisent le type de compression à utiliser lorsque Athena écrit dans ces tables.
+ Pour CTAS, consultez [Propriétés de la table CTAS](create-table-as.md#ctas-table-properties). Pour obtenir des exemples, consultez [Exemples de requêtes CTAS](ctas-examples.md).
+ Pour CREATE TABLE, consultez [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) pour obtenir la liste des propriétés de la table de compression.

## Spécification de l’absence de compression
<a name="compression-support-specifying-no-compression"></a>

Les instructions CREATE TABLE prennent en charge l'écriture de fichiers non compressés. Pour écrire des fichiers non compressés, utilisez la syntaxe suivante : 
+ CREATE TABLE (fichier texte ou JSON) — Dans `TBLPROPERTIES`, spécifiez `write.compression = NONE`.
+ CREATE TABLE (Parquet) — Dans `TBLPROPERTIES`, spécifiez `parquet.compression = UNCOMPRESSED`.
+ CREATE TABLE (ORC) — Dans `TBLPROPERTIES`, spécifiez `orc.compress = NONE`.

## Remarques et ressources
<a name="compression-support-notes-and-resources"></a>
+ Actuellement, les extensions de fichier en majuscules telles que `.GZ` ou `.BZIP2` ne sont pas reconnues par Athena. Évitez d'utiliser des jeux de données avec des extensions de fichier en majuscules ou renommez les extensions des fichiers de données en minuscules.
+ Pour des données aux formats CSV, TSV et JSON, Athena détermine le type de compression à partir de l'extension de fichier. Si aucune extension de fichier n'est présente, Athena traite les données comme du texte brut non compressé. Si vos données sont compressées, assurez-vous que le nom de fichier comprend l'extension de compression, par exemple `gz`.
+ Le format de fichier ZIP n'est pas pris en charge.
+ Dans le cadre de l’interrogation des journaux Amazon Data Firehose depuis Athena, les formats pris en charge incluent la compression GZIP ou les fichiers ORC avec compression SNAPPY.
+ Pour plus d'informations sur l'utilisation de la compression, consultez la section 3 (« Compresser et diviser des fichiers ») du billet de blog AWS Big Data sur les [10 meilleurs conseils d'optimisation des performances pour Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**Topics**
+ [Spécification de formats de compression](#compression-support-specifying-compression-formats)
+ [Spécification de l’absence de compression](#compression-support-specifying-no-compression)
+ [Remarques et ressources](#compression-support-notes-and-resources)
+ [Compression de la table Hive](compression-support-hive.md)
+ [compression de la table Iceberg](compression-support-iceberg.md)
+ [Niveaux de compression ZSTD](compression-support-zstd-levels.md)

# Utilisation de la compression des tables Hive
<a name="compression-support-hive"></a>

Les options de compression des tables Hive dans Athena varient en fonction de la version du moteur et du format de fichier.

## Prise en charge de la compression Hive dans la version 3 du moteur Athena
<a name="compression-support-hive-v3"></a>

Le tableau suivant résume la prise en charge des formats de compression dans la version 3 du moteur Athena pour les formats de fichier de stockage dans Apache Hive. Le format de fichier texte inclut TSV, CSV, JSON et personnalisé SerDes pour le texte. La mention « Oui » ou « Non » dans une cellule s'applique de la même manière aux opérations de lecture et d'écriture, sauf indication contraire. Pour les besoins de cette table, les instructions CREATE TABLE, CTAS et INSERT INTO sont considérées comme des opérations d'écriture. Pour plus d’informations sur l’utilisation des niveaux de compression ZSTD sur Athena, consultez [Utilisation des niveaux de compression ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | Ion | ORC | Parquet | Fichier texte | 
| --- | --- | --- | --- | --- | --- | 
| BZIP2 | Oui | Oui | Non | Non | Oui | 
| DEFLATE | Oui | Non | Non | Non | Non | 
| GZIP | Non | Oui | Non | Oui | Oui | 
| LZ4 | Non | Oui | Oui |  Écriture - Non Lecture - Oui  | Oui | 
| LZO | Non |  Écriture - Non Lecture - Oui  | Non |  Écriture - Non Lecture - Oui  |  Écriture - Non Lecture - Oui  | 
| SNAPPY | Oui | Oui | Oui | Oui | Oui | 
| ZLIB | Non | Non | Oui | Non | Non | 
| ZSTD | Oui | Oui | Oui | Oui | Oui | 
| NONE | Oui | Oui | Oui | Oui | Oui | 

# Utilisation de la compression des tables Iceberg
<a name="compression-support-iceberg"></a>

Les options de compression des tables Iceberg dans Athena varient en fonction de la version du moteur et du format de fichier.

## Prise en charge de la compression Iceberg dans la version 3 du moteur Athena
<a name="compression-support-iceberg-v3"></a>

Le tableau suivant résume la prise en charge des formats de compression dans la version 3 du moteur Athena pour les formats de fichier de stockage dans Apache Iceberg. La mention « Oui » ou « Non » dans une cellule s'applique de la même manière aux opérations de lecture et d'écriture, sauf indication contraire. Pour les besoins de cette table, les instructions CREATE TABLE, CTAS et INSERT INTO sont considérées comme des opérations d'écriture. Le format de stockage par défaut pour Iceberg dans la version 3 du moteur Athena est Parquet. Le format de compression par défaut pour Iceberg dans la version 3 du moteur Athena est ZSTD. Pour plus d’informations sur l’utilisation des niveaux de compression ZSTD sur Athena, consultez [Utilisation des niveaux de compression ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | ORC | Parquet (par défaut) | 
| --- | --- | --- | --- | 
| BZIP2 | Non | Non | Non | 
| GZIP | Oui | Non | Oui | 
| LZ4 | Non | Oui | Non | 
| SNAPPY | Oui | Oui | Oui | 
| ZLIB | Non | Oui | Non | 
| ZSTD | Oui | Oui | Oui (par défaut) | 
| NONE | Oui (précisez None ou Deflate) | Oui | Oui (précisez None ou Uncompressed) | 

# Utilisation des niveaux de compression ZSTD
<a name="compression-support-zstd-levels"></a>

L’[algorithme de compression de données en temps réel Zstandard](http://facebook.github.io/zstd/) est un algorithme de compression rapide qui fournit des taux de compression élevés. La bibliothèque Zstandard est un logiciel open source qui utilise une licence BSD. Athena prend en charge la lecture et l’écriture de données ORC, Parquet et de fichiers texte compressés selon la norme ZSTD.

Vous pouvez utiliser les niveaux de compression ZSTD pour ajuster le taux et la vitesse de compression en fonction de vos besoins. La bibliothèque ZSTD prend en charge des niveaux de compression compris entre 1 et 22. Athena utilise le niveau de compression ZSTD 3 par défaut.

Les niveaux de compression offrent des compromis précis entre la vitesse de compression et le niveau de compression atteint. Des niveaux de compression plus faibles offrent une vitesse plus importante, mais des fichiers de plus grande taille. Par exemple, vous pouvez utiliser le niveau 1 si la vitesse est la plus importante et le niveau 22 si la taille est la plus importante. Le niveau 3 convient à de nombreux cas d’utilisation et constitue le niveau par défaut. Utilisez les niveaux supérieurs à 19 avec prudence, car ils nécessitent plus de mémoire. La bibliothèque ZSTD propose également des niveaux de compression négatifs qui étendent la plage de vitesses et de taux de compression. Pour plus d’informations, consultez le [RFC de compression Zstandard](https://datatracker.ietf.org/doc/html/rfc8478).

L’abondance de niveaux de compression offre de nombreuses possibilités de réglage précis. Toutefois, assurez-vous de mesurer vos données et de prendre en compte les compromis lorsque vous décidez d’un niveau de compression. Nous vous recommandons d’utiliser le niveau 3 par défaut ou un niveau compris entre 6 et 9 pour obtenir un compromis raisonnable entre la vitesse de compression et la taille des données compressées. Réservez les niveaux 20 et plus pour les cas où la taille est la plus importante et où la vitesse de compression n’est pas un problème.

## Considérations et restrictions
<a name="compression-support-zstd-levels-considerations-and-limitations"></a>

Lorsque vous utilisez le niveau de compression ZSTD dans Athena, tenez compte des points suivants.
+ La propriété `compression_level` ZSTD est prise en charge uniquement dans la version 3 du moteur Athena.
+ La propriété `compression_level` ZSTD est prise en charge pour les instructions `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` (CTAS) et `UNLOAD`.
+ La propriété `compression_level` est facultative.
+ La propriété `compression_level` est prise en charge uniquement pour la compression ZSTD.
+ Les niveaux de compression possibles sont compris entre 1 et 22.
+ Le niveau de compression par défaut est le niveau 3.

Pour de plus amples informations sur la prise en charge de la compression ZSTD Apache Hive dans Athena, consultez [Utilisation de la compression des tables Hive](compression-support-hive.md). Pour de plus amples informations sur la prise en charge de la compression ZSTD Apache Iceberg dans Athena, consultez [Utilisation de la compression des tables Iceberg](compression-support-iceberg.md).

## Spécification des niveaux de compression ZSTD
<a name="compression-support-zstd-levels-specifying"></a>

Pour spécifier le niveau de compression ZSTD pour les instructions `ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` et `UNLOAD`, utilisez la propriété `compression_level`. Pour spécifier la compression ZSTD elle-même, vous devez utiliser la propriété de compression individuelle utilisée par la syntaxe de l’instruction.

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

Dans la clause `SET TBLPROPERTIES` de l’instruction [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md), spécifiez la compression ZSTD à l’aide de `'write.compression' = ' ZSTD'` ou de `'parquet.compression' = 'ZSTD'`. Utilisez ensuite la propriété `compression_level` pour spécifier une valeur comprise entre 1 et 22 (par exemple, ’`compression_level' = '5'`). Si vous ne spécifiez aucune propriété de niveau de compression, le niveau de compression est défini par défaut sur 3.

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

L’exemple suivant modifie la table `existing_table` pour utiliser le format de fichier Parquet avec une compression ZSTD et un niveau de compression ZSTD 4. Notez que dans la clause `TBLPROPERTIES`, la valeur de niveau de compression doit être saisie sous la forme d’une chaîne plutôt que d’un entier et doit donc être placée entre guillemets simples ou doubles.

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

### CREATE TABLE
<a name="compression-support-zstd-levels-create-table"></a>

Dans la clause `TBLPROPERTIES` de l’instruction [CREATE TABLE](create-table.md), spécifiez '`write.compression' = 'ZSTD'` ou `'parquet.compression' = 'ZSTD'`, puis utilisez `compression_level = compression_level` et spécifiez une valeur comprise entre 1 et 22 sous la forme d’une chaîne. Si la propriété `compression_level` n’est pas spécifiée, le niveau de compression par défaut est 3.

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

L’exemple suivant crée un tableau au format de fichier Parquet à l’aide de la compression ZSTD et du niveau de compression ZSTD 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>

Dans la clause `WITH` de l’instruction [CREATE TABLE AS](create-table-as.md), spécifiez `write_compression = 'ZSTD'` ou `parquet_compression = 'ZSTD'`, puis utilisez `compression_level = compression_level` et spécifiez une valeur comprise entre 1 et 22 sous la forme d’un entier. Si la propriété `compression_level` n’est pas spécifiée, le niveau de compression par défaut est 3.

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

L’exemple CTAS suivant spécifie Parquet comme format de fichier utilisant la compression ZSTD avec un niveau de compression 4. Notez que dans la clause `WITH`, la valeur de niveau de compression doit être spécifiée sous la forme d’un entier, et non sous la forme d’une chaîne.

```
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>

Dans la clause `WITH` de l’instruction [UNLOAD](unload.md), spécifiez `compression = 'ZSTD'`, puis utilisez `compression_level = compression_level` et spécifiez une valeur comprise entre 1 et 22 sous la forme d’un entier. Si la propriété `compression_level` n’est pas spécifiée, le niveau de compression par défaut est 3.

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

L’exemple suivant décharge les résultats de la requête vers l’emplacement spécifié à l’aide du format de fichier Parquet, de la compression ZSTD et du niveau de compression ZSTD 4.

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