

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usa la compressione in Athena
Usa la compressione

Athena supporta diversi formati di compressione per la lettura e la scrittura di dati, inclusa la lettura da una tabella che utilizza più formati di compressione. Ad esempio, Athena può leggere correttamente i dati in una tabella che utilizza il formato file Parquet quando alcuni file Parquet vengono compressi con Snappy e altri file Parquet vengono compressi con GZIP. Lo stesso principio vale per i formati di archiviazione ORC, file di testo e JSON.

## Formati di compressione supportati


Athena supporta i seguenti formati di compressione:
+ **BZIP2** — Formato che utilizza l'algoritmo Burrows-Wheeler.
+ **DEFLATE**: algoritmo di compressione basato su [LZSS](https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Storer%E2%80%93Szymanski) e [codifica Huffman](https://en.wikipedia.org/wiki/Huffman_coding). [Deflate](https://en.wikipedia.org/wiki/Deflate) è rilevante solo per il formato file Avro.
+ **GZIP**: algoritmo di compressione basato su Deflate. Per le tabelle Hive nel motore Athena versioni 2 e 3 e le tabelle Iceberg nel motore Athena versione 2, il formato di compressione in scrittura predefinito per i file nei formati di archiviazione dei file di testo e Parquet è GZIP. I file nel formato `tar.gz` non sono supportati.
+ **LZ4**— Questo membro della famiglia Lempel-Ziv 77 (LZ7) si concentra anche sulla velocità di compressione e decompressione piuttosto che sulla compressione massima dei dati. LZ4 ha i seguenti formati di inquadratura:
  + **LZ4 Raw/Unframed**: implementazione standard senza cornice del formato di compressione a blocchi. LZ4 [Per ulteriori informazioni, vedere la descrizione del formato a blocchi su. LZ4 ](https://github.com/lz4/lz4/blob/dev/doc/lz4_Block_format.md) GitHub
  + **LZ4 framed**: la consueta implementazione del framing di. LZ4 Per ulteriori informazioni, vedere la [descrizione del formato del LZ4 frame](https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md) su. GitHub
  + **LZ4 hadoop-compatible**: l'implementazione di Apache Hadoop di. LZ4 [Questa implementazione include la compressione con la classe .java. LZ4 BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)
+ **LZO**: formato che utilizza l'algoritmo Lempel-Ziv-Oberhumer, che si concentra sull'elevata velocità di compressione e decompressione anziché sulla compressione massima dei dati. LZO ha due implementazioni:
  + **LZO standard**: per ulteriori informazioni, consulta il [riassunto](http://www.oberhumer.com/opensource/lzo/#abstract) su LZO sul sito Web di Oberhumer.
  + **Compatibile con LZO con hadoop: questa implementazione racchiude** [l'algoritmo LZO con 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** — Algoritmo di compressione che fa parte della famiglia Lempel-Ziv 77 (). LZ7 Snappy si concentra sull'elevata velocità di compressione e decompressione piuttosto che sulla compressione massima dei dati.
+ **ZLIB**: basato su Deflate, ZLIB è il formato di compressione della scrittura di default per i file nel formato di archiviazione dati ORC. [Per ulteriori informazioni, consulta la pagina zlib su.](https://github.com/madler/zlib) GitHub
+  **ZSTD**: l'[algoritmo di compressione dei dati in tempo reale Zstandard](http://facebook.github.io/zstd/) è un algoritmo di compressione veloce che fornisce rapporti di compressione elevati. La libreria Zstandard (ZSTD) viene fornita come software open source tramite una licenza BSD. ZSTD è la compressione predefinita per le tabelle Iceberg. Quando si scrivono dati compressi ZSTD, Athena utilizza il livello di compressione ZSTD 3 per impostazione predefinita. Per ulteriori informazioni sui livelli di compressione ZSTD in Athena, consulta [Usa i livelli di compressione ZSTD](compression-support-zstd-levels.md).

**Nota**  
Athena non supporta la scrittura di file Parquet compressi con LZ4 o formati LZO. Sono però supportate le letture per questi formati di compressione.

## Specifica i formati di compressione


Quando si scrivono istruzioni CREATE TABLE o CTAS, è possibile specificare le proprietà di compressione che specificano il tipo di compressione da utilizzare quando Athena scrive su tali tabelle.
+ Per CTAS, consultare [Proprietà tabella CTAS](create-table-as.md#ctas-table-properties). Per alcuni esempi, consulta [Esempi di query CTAS](ctas-examples.md).
+ Per CREATE TABLE, consultare [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md) per un elenco delle proprietà della tabella di compressione.

## Specifica l’assenza di compressione


Le istruzioni CREATE TABLE supportano la scrittura di file non compressi. Per scrivere file non compressi, utilizza la sintassi seguente: 
+ CREATE TABLE (file di testo o JSON): in `TBLPROPERTIES`, specifica `write.compression = NONE`.
+ CREATE TABLE (Parquet): in `TBLPROPERTIES`, specifica `parquet.compression = UNCOMPRESSED`.
+ CREATE TABLE (ORC): in `TBLPROPERTIES`, specifica `orc.compress = NONE`.

## Note e risorse

+ Attualmente, estensioni di file in lettere maiuscole come `.GZ` o `.BZIP2` non sono riconosciute da Athena. Evitare di utilizzare set di dati con estensioni di file in lettere maiuscole o rinominare le estensioni dei file di dati in lettere minuscole.
+ Per i dati in CSV, TSV e JSON, Athena determina il tipo di compressione dall'estensione del file. Se non è presente alcuna estensione di file, i dati vengono gestiti da Athena come testo normale non compresso. Se i dati sono compressi, verifica che il nome del file includa l'estensione della compressione, ad esempio `gz`.
+ Il formato di file ZIP non è supportato.
+ Per interrogare i log di Amazon Data Firehose da Athena, i formati supportati includono la compressione GZIP o i file ORC con compressione SNAPPY.
+ Per ulteriori informazioni sull'uso della compressione, consulta la sezione 3 («Comprimi e dividi file») del post del blog AWS Big Data I [10 migliori consigli per l'ottimizzazione delle prestazioni per Amazon Athena](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/).

**Topics**
+ [

## Specifica i formati di compressione
](#compression-support-specifying-compression-formats)
+ [

## Specifica l’assenza di compressione
](#compression-support-specifying-no-compression)
+ [

## Note e risorse
](#compression-support-notes-and-resources)
+ [Compressione delle tabelle Hive](compression-support-hive.md)
+ [Compressione delle tabelle Iceberg](compression-support-iceberg.md)
+ [Livelli di compressione ZSTD](compression-support-zstd-levels.md)

# Usa la compressione delle tabelle Hive
Compressione delle tabelle Hive

Le opzioni di compressione per le tabelle Hive in Athena cambiano in base alla versione del motore e al formato del file.

## Supporto della compressione Hive nella versione 3 del motore Athena


Nella tabella seguente viene riepilogato il supporto del formato di compressione nella versione 3 del motore Athena per i formati file di archiviazione in Apache Hive. Il formato di file di testo include TSV, CSV, JSON e testo personalizzato SerDes. "Yes" (Sì) o "No" in una cella si applicano allo stesso modo alle operazioni di lettura e di scrittura, tranne dove indicato. Ai fini di questa tabella, CREATE TABLE, CTAS e INSERT INTO sono considerate operazioni di scrittura. Per ulteriori informazioni sui livelli di compressione ZSTD in Athena, consulta [Usa i livelli di compressione ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | Ion | ORC | Parquet | File di testo | 
| --- | --- | --- | --- | --- | --- | 
| BZIP2 | Sì  | Sì | No | No | Sì | 
| DEFLATE | Sì | No | No | No | No | 
| GZIP | No | Sì | No | Sì | Sì | 
| LZ4 | No | Sì | Sì |  Scrittura - No Lettura - Sì  | Sì | 
| LZO | No |  Scrittura - No Lettura - Sì  | No |  Scrittura - No Lettura - Sì  |  Scrittura - No Lettura - Sì  | 
| SNAPPY | Sì  | Sì | Sì | Sì | Sì | 
| ZLIB | No | No | Sì | No | No | 
| ZSTD | Sì  | Sì | Sì | Sì | Sì | 
| NONE | Sì  | Sì | Sì | Sì | Sì | 

# Usa la compressione delle tabelle Iceberg
Compressione delle tabelle Iceberg

Le opzioni di compressione per le tabelle Iceberg in Athena cambiano in base alla versione del motore e al formato del file.

## Supporto della compressione Iceberg nella versione 3 del motore Athena


Nella tabella seguente viene riepilogato il supporto del formato di compressione nella versione 3 del motore Athena per i formati file di archiviazione in Apache Iceberg. "Yes" (Sì) o "No" in una cella si applicano allo stesso modo alle operazioni di lettura e di scrittura, tranne dove indicato. Ai fini di questa tabella, CREATE TABLE, CTAS e INSERT INTO sono considerate operazioni di scrittura. Il formato di archiviazione predefinito per Iceberg nella versione 3 del motore Athena è Parquet. Il formato di compressione predefinito per Iceberg nella versione 3 del motore Athena è ZSTD. Per ulteriori informazioni sui livelli di compressione ZSTD in Athena, consulta [Usa i livelli di compressione ZSTD](compression-support-zstd-levels.md).


****  

|  | Avro | ORC | Parquet (predefinito) | 
| --- | --- | --- | --- | 
| BZIP2 | No | No | No | 
| GZIP | Sì | No | Sì | 
| LZ4 | No | Sì | No | 
| SNAPPY | Sì  | Sì | Sì | 
| ZLIB | No | Sì | No | 
| ZSTD | Sì  | Sì | Sì (impostazione predefinita) | 
| NONE | Sì (specifica None o Deflate) | Sì | Sì (specifica None o Uncompressed) | 

# Usa i livelli di compressione ZSTD
Livelli di compressione ZSTD

L'[algoritmo di compressione dei dati in tempo reale Zstandard](http://facebook.github.io/zstd/) è un algoritmo di compressione veloce che fornisce rapporti di compressione elevati. La libreria Zstandard (ZSTD) è un software open source e utilizza una licenza BSD. Athena supporta la lettura e la scrittura di dati compressi ZSTD ORC, Parquet e file di testo.

È possibile utilizzare i livelli di compressione ZSTD per regolare il rapporto di compressione e la velocità in base alle proprie esigenze. La libreria ZSTD supporta livelli di compressione da 1 a 22. Per impostazione predefinita, Athena utilizza il livello di compressione ZSTD 3.

I livelli di compressione forniscono compromessi granulari tra la velocità di compressione e la quantità di compressione raggiunta. Livelli di compressione più bassi offrono una maggiore velocità ma file di dimensioni maggiori. Ad esempio, puoi usare il livello 1 se la velocità è più importante e il livello 22 se invece è più importante la dimensione. Il livello 3 è adatto a numerosi casi d'uso ed è l'impostazione predefinita. Usa i livelli superiori a 19 con cautela poiché richiedono più memoria. La libreria ZSTD offre anche livelli di compressione negativi che estendono la gamma di velocità e rapporti di compressione. Per ulteriori informazioni, consulta [RFC di compressione Zstandard](https://datatracker.ietf.org/doc/html/rfc8478).

L'abbondanza di livelli di compressione offre notevoli opportunità per una regolazione precisa. Tuttavia, quando decidi il livello di compressione assicurati di misurare i tuoi dati e di prendere in considerazione dei compromessi. Si consiglia di utilizzare il livello predefinito 3 o un livello compreso tra 6 e 9 per un ragionevole compromesso tra velocità di compressione e dimensione dei dati compressi. Utilizza i livelli pari o superiori a 20 per i casi in cui le dimensioni sono più importanti e la velocità di compressione non è un problema.

## Considerazioni e limitazioni


Quando utilizzi un livello di compressione ZSTD in Athena, considera i seguenti punti.
+ La proprietà `compression_level` ZSTD è supportata solo nella versione 3 del motore Athena.
+ La proprietà `compression_level` ZSTD è supportata per le istruzioni`ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` (CTAS) e `UNLOAD`.
+ La proprietà `compression_level` è facoltativa.
+ La proprietà `compression_level` è supportata solo per la compressione ZSTD.
+ I livelli di compressione possibili sono compresi tra 1 e 22.
+ Il livello di compressione predefinito è 3.

Per informazioni sul supporto della compressione Apache Hive ZSTD in Athena, consulta [Usa la compressione delle tabelle Hive](compression-support-hive.md). Per informazioni sul supporto della compressione Apache Iceberg ZSTD in Athena, consulta [Usa la compressione delle tabelle Iceberg](compression-support-iceberg.md).

## Specifica i livelli di compressione ZSTD


Per specificare il livello di compressione ZSTD per le istruzioni`ALTER TABLE`, `CREATE TABLE`, `CREATE TABLE AS` e `UNLOAD`, utilizza la proprietà `compression_level`. Per specificare la compressione ZSTD stessa, è necessario utilizzare la singola proprietà di compressione utilizzata dalla sintassi dell'istruzione.

### ALTER TABLE SET TBLPROPERTIES


Nella clausola `SET TBLPROPERTIES` dell'istruzione [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md), specifica la compressione ZSTD utilizzando `'write.compression' = ' ZSTD'` o `'parquet.compression' = 'ZSTD'`. Quindi utilizza la proprietà `compression_level` per specificare un valore compreso tra 1 e 22 (ad esempio, '`compression_level' = '5'`). Se non si specifica una proprietà del livello di compressione, il livello di compressione predefinito sarà 3.

#### Esempio


L'esempio seguente modifica la tabella `existing_table` per utilizzare il formato file Parquet con compressione ZSTD e livello di compressione ZSTD 4. Nota che nella clausola `TBLPROPERTIES` il valore del livello di compressione deve essere immesso come stringa anziché come numero intero e pertanto deve essere racchiuso tra virgolette singole o doppie.

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

### CREATE TABLE


Nella clausola `TBLPROPERTIES` dell’istruzione [CREATE TABLE](create-table.md), specifica ’`write.compression' = 'ZSTD'` o `'parquet.compression' = 'ZSTD'`, quindi utilizza `compression_level = compression_level` e specifica un valore compreso tra 1 e 22 come stringa. Se la proprietà `compression_level` non viene specificata, il livello di compressione predefinito sarà 3.

#### Esempio


L'esempio seguente crea una tabella nel formato file Parquet con compressione ZSTD e livello di compressione 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)


Nella clausola `WITH` dell’istruzione [CREATE TABLE AS](create-table-as.md), specifica `write_compression = 'ZSTD'` o `parquet_compression = 'ZSTD'`, quindi utilizza `compression_level = compression_level` e specifica un valore compreso tra 1 e 22 come numero intero. Se la proprietà `compression_level` non viene specificata, il livello di compressione predefinito sarà 3.

#### Esempio


L'esempio CTAS seguente specifica Parquet come formato file con compressione ZSTD e livello di compressione ZSTD 4. Si noti che, nella clausola `WITH`, il valore del livello di compressione deve essere specificato come numero intero, non come stringa.

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

### UNLOAD


Nella clausola `WITH` dell’istruzione [UNLOAD](unload.md), specifica `compression = 'ZSTD'`, quindi utilizza `compression_level = compression_level` e specifica un valore compreso tra 1 e 22 come numero intero. Se la proprietà `compression_level` non viene specificata, il livello di compressione predefinito sarà 3.

#### Esempio


L'esempio seguente scarica i risultati della query nella posizione specificata utilizzando il formato file Parquet, la compressione ZSTD e il livello di compressione ZSTD 4.

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