

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

# Come partizionare i dati
<a name="partitions"></a>

Effettuando il partizionamento dei dati, è possibile limitare la quantità di dati scansionati da ogni query, migliorando così le prestazioni e riducendo i costi. in base a qualsiasi chiave di partizione. In genere è consigliabile partizionare i dati in base al tempo, spesso determinando uno schema di partizionamento multilivello. Ad esempio, un cliente che ha dati in entrata ogni ora potrebbe decidere di partizione per anno, mese, data e ora. Un altro cliente che ha dati provenienti da diverse origini ma che vengono caricati una volta al giorno, potrebbe eseguire la partizione in base all'identificatore dell'origine dati e alla data.

Athena può utilizzare partizioni in stile Apache Hive, i cui percorsi di dati contengono coppie chiave-valore collegate da simboli di uguale (ad esempio, `country=us/...` o `year=2021/month=01/day=26/...`). Pertanto, i percorsi includono sia i nomi delle chiavi di partizione che i valori rappresentati da ciascun percorso. Per caricare nuove partizioni Hive in una tabella partizionata, è possibile utilizzare il comando [MSCK REPAIR TABLE](msck-repair-table.md), che funziona solo con partizioni in stile Hive.

Athena può utilizzare anche schemi di partizionamento in stile non Hive. Ad esempio, CloudTrail i log e i flussi di consegna Firehose utilizzano componenti di percorso separati per parti di data come. `data/2021/01/26/us/6fc7845e.json` Per le partizioni non in stile Hive, è possibile usare [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) per aggiungere manualmente le partizioni.

## Considerazioni e limitazioni
<a name="partitions-considerations-limitations"></a>

Quando si utilizza il partizionamento, tenere presente i seguenti punti:
+ Se esegui una query su una tabella partizionata e specifichi la partizione nella clausola `WHERE`, Athena analizza i dati solo da quella partizione.
+ Se si esegue le query sui bucket Amazon S3 con un numero elevato di oggetti e i dati non sono partizionati, queste query possono influenzare i limiti del tasso di richieste `GET` in Amazon S3 e comportare eccezioni Amazon S3. Per evitare errori, partiziona i dati. Inoltre, considera di ottimizzare i tassi di richiesta Amazon S3. Per maggiori informazioni, consulta le [Best practice per la creazione di modelli: ottimizzazione delle prestazioni di Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/request-rate-perf-considerations.html).
+ Le posizioni delle partizioni da utilizzare con Athena devono utilizzare il protocollo `s3` (ad esempio, `s3://amzn-s3-demo-bucket/folder/`). In Athena, i percorsi che utilizzano altri protocolli (ad esempio, `s3a://amzn-s3-demo-bucket/folder/`) determineranno errori quando le query `MSCK REPAIR TABLE` vengono eseguite sulle tabelle contenenti. 
+ Assicurarsi che il percorso Amazon S3 sia in minuscolo invece che in camel case (ad esempio, `userid` invece di `userId`) Se il percorso S3 è in camel case, `MSCK REPAIR TABLE` non aggiunge le partizioni a AWS Glue Data Catalog. Per ulteriori informazioni, consulta [MSCK REPAIR TABLE](msck-repair-table.md).
+ Poiché `MSCK REPAIR TABLE` analizza sia una cartella che le relative sottocartelle per trovare uno schema di partizioni corrispondente, assicurarsi di conservare i dati per tabelle separate in gerarchie di cartelle separate. Supponiamo ad esempio che tu abbia dati per la tabella 1 in `s3://amzn-s3-demo-bucket1` e dati per la tabella 2 in `s3://amzn-s3-demo-bucket1/table-2-data`. Se entrambe le tabelle sono partizionate per stringa, `MSCK REPAIR TABLE` aggiungerà le partizioni per la tabella 2 alla tabella 1. Per evitare ciò, si consiglia di utilizzare invece strutture di cartelle separate come `s3://amzn-s3-demo-bucket1` e `s3://amzn-s3-demo-bucket2`. Questo comportamento è coerente con Amazon EMR e Apache Hive.
+ Se utilizzi il AWS Glue Data Catalog con Athena, consulta [AWS Glue endpoint e quote per le quote](https://docs.aws.amazon.com/general/latest/gr/glue.html) di servizio sulle partizioni per account e per tabella. 
  + Sebbene Athena supporti l'interrogazione di AWS Glue tabelle con 10 milioni di partizioni, Athena non è in grado di leggere più di 1 milione di partizioni in una singola scansione. In tali scenari, l'indicizzazione delle partizioni può essere utile. Per ulteriori informazioni, consulta l'articolo del blog AWS Big Data [Migliora le prestazioni delle query di Amazon Athena utilizzando gli indici di AWS Glue Data Catalog partizione](https://aws.amazon.com/blogs/big-data/improve-amazon-athena-query-performance-using-aws-glue-data-catalog-partition-indexes/).
+ Per richiedere un aumento della quota delle partizioni se utilizzi il AWS Glue Data Catalog, visita la console [Service Quotas](https://console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/glue/quotas) per. AWS Glue

## Creazione e caricamento di una tabella con dati partizionati
<a name="partitions-creating-loading"></a>

Per creare una tabella con partizioni, utilizzare la clausola `PARTITIONED BY` nell'istruzione [CREATE TABLE](create-table.md). La clausola `PARTITIONED BY` definisce le chiavi su cui partizionare i dati, come nell'esempio seguente. La clausola `LOCATION` specifica la posizione principale dei dati partizionati.

```
CREATE EXTERNAL TABLE users (
first string,
last string,
username string
)
PARTITIONED BY (id string)
STORED AS parquet
LOCATION 's3://amzn-s3-demo-bucket'
```

Dopo aver creato la tabella, è possibile caricare i dati nelle partizioni per l'interrogazione. Per le partizioni stile Hive, esegui [MSCK REPAIR TABLE](msck-repair-table.md). Per le partizioni in stile non Hive, utilizza [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) per aggiungere manualmente le partizioni.

## Preparazione di dati in stile Hive e in stile non Hive per le query
<a name="partitions-preparing-data"></a>

Nelle sezioni seguenti viene illustrato come preparare i dati in stile Hive e non Hive per le query in Athena.

### Scenario 1: dati archiviati su Amazon S3 in formato Hive
<a name="scenario-1-data-already-partitioned-and-stored-on-s3-in-hive-format"></a>

In questo scenario, le partizioni vengono archiviate in cartelle separate in Amazon S3. Ad esempio, ecco l'elenco parziale di campioni e impressioni prodotti dal comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/ls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/ls.html), che elenca gli oggetti S3 con un prefisso specificato:

```
aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/

    PRE dt=2009-04-12-13-00/
    PRE dt=2009-04-12-13-05/
    PRE dt=2009-04-12-13-10/
    PRE dt=2009-04-12-13-15/
    PRE dt=2009-04-12-13-20/
    PRE dt=2009-04-12-14-00/
    PRE dt=2009-04-12-14-05/
    PRE dt=2009-04-12-14-10/
    PRE dt=2009-04-12-14-15/
    PRE dt=2009-04-12-14-20/
    PRE dt=2009-04-12-15-00/
    PRE dt=2009-04-12-15-05/
```

Qui, i log vengono archiviati con il nome di colonna (dt) impostato in modo corrispondente a incrementi di giorno, ora e minuto. Quando si assegna un DDL con il percorso della cartella padre, lo schema e il nome della colonna partizionata, Athena è in grado di eseguire query sui dati in quelle sottocartelle.

#### Creazione della tabella
<a name="creating-a-table"></a>

Per creare una tabella da questi dati, creare una partizione insieme a 'dt' come nella seguente istruzione DDL di Athena:

```
CREATE EXTERNAL TABLE impressions (
    requestBeginTime string,
    adId string,
    impressionId string,
    referrer string,
    userAgent string,
    userCookie string,
    ip string,
    number string,
    processId string,
    browserCookie string,
    requestEndTime string,
    timers struct<modelLookup:string, requestTime:string>,
    threadId string,
    hostname string,
    sessionId string)
PARTITIONED BY (dt string)
ROW FORMAT  serde 'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION 's3://elasticmapreduce/samples/hive-ads/tables/impressions/' ;
```

Questa tabella utilizza il serializzatore/deserializzatore JSON nativo di Hive per leggere i dati JSON archiviati in Amazon S3. Per ulteriori informazioni sui formati supportati, consulta [Scegli un file SerDe per i tuoi dati](supported-serdes.md).

#### Esecuzione di MSCK REPAIR TABLE
<a name="run-msck-repair-table"></a>

Dopo aver eseguito la query `CREATE TABLE`, eseguire il comando `MSCK REPAIR TABLE` nell'editor di query Athena per caricare le partizioni, come nell'esempio seguente.

```
MSCK REPAIR TABLE impressions
```

Una volta eseguito il comando, i dati sono pronti per l'esecuzione della query.

#### Esecuzione di query sui dati
<a name="query-the-data"></a>

Eseguire la query sui dati dalla tabella di impressioni utilizzando la colonna di partizione. Ecco un esempio:

```
SELECT dt,impressionid FROM impressions WHERE dt<'2009-04-12-14-00' and dt>='2009-04-12-13-00' ORDER BY dt DESC LIMIT 100
```

Questa query dovrebbe restituire risultati simili ai seguenti:

```
2009-04-12-13-20    ap3HcVKAWfXtgIPu6WpuUfAfL0DQEc
2009-04-12-13-20    17uchtodoS9kdeQP1x0XThKl5IuRsV
2009-04-12-13-20    JOUf1SCtRwviGw8sVcghqE5h0nkgtp
2009-04-12-13-20    NQ2XP0J0dvVbCXJ0pb4XvqJ5A4QxxH
2009-04-12-13-20    fFAItiBMsgqro9kRdIwbeX60SROaxr
2009-04-12-13-20    V4og4R9W6G3QjHHwF7gI1cSqig5D1G
2009-04-12-13-20    hPEPtBwk45msmwWTxPVVo1kVu4v11b
2009-04-12-13-20    v0SkfxegheD90gp31UCr6FplnKpx6i
2009-04-12-13-20    1iD9odVgOIi4QWkwHMcOhmwTkWDKfj
2009-04-12-13-20    b31tJiIA25CK8eDHQrHnbcknfSndUk
```

### Scenario 2: i dati non sono partizionati in formato Hive
<a name="scenario-2-data-is-not-partitioned"></a>

Nell'esempio seguente, il comando `aws s3 ls` mostra i registri [ELB](elasticloadbalancer-classic-logs.md) archiviati in Amazon S3. Notare come il layout dei dati non utilizza coppie `key=value` e quindi non è in formato Hive. (L'opzione `--recursive` per il comando `aws s3 ls` specifica che siano elencati tutti i file o gli oggetti nella directory o nel prefisso specificati).

```
aws s3 ls s3://athena-examples-myregion/elb/plaintext/ --recursive

2016-11-23 17:54:46   11789573 elb/plaintext/2015/01/01/part-r-00000-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    8776899 elb/plaintext/2015/01/01/part-r-00001-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    9309800 elb/plaintext/2015/01/01/part-r-00002-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    9412570 elb/plaintext/2015/01/01/part-r-00003-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47   10725938 elb/plaintext/2015/01/01/part-r-00004-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:46    9439710 elb/plaintext/2015/01/01/part-r-00005-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47          0 elb/plaintext/2015/01/01_$folder$
2016-11-23 17:54:47    9012723 elb/plaintext/2015/01/02/part-r-00006-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    7571816 elb/plaintext/2015/01/02/part-r-00007-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:47    9673393 elb/plaintext/2015/01/02/part-r-00008-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   11979218 elb/plaintext/2015/01/02/part-r-00009-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48    9546833 elb/plaintext/2015/01/02/part-r-00010-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   10960865 elb/plaintext/2015/01/02/part-r-00011-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48          0 elb/plaintext/2015/01/02_$folder$
2016-11-23 17:54:48   11360522 elb/plaintext/2015/01/03/part-r-00012-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48   11211291 elb/plaintext/2015/01/03/part-r-00013-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:48    8633768 elb/plaintext/2015/01/03/part-r-00014-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49   11891626 elb/plaintext/2015/01/03/part-r-00015-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49    9173813 elb/plaintext/2015/01/03/part-r-00016-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49   11899582 elb/plaintext/2015/01/03/part-r-00017-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:49          0 elb/plaintext/2015/01/03_$folder$
2016-11-23 17:54:50    8612843 elb/plaintext/2015/01/04/part-r-00018-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50   10731284 elb/plaintext/2015/01/04/part-r-00019-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    9984735 elb/plaintext/2015/01/04/part-r-00020-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    9290089 elb/plaintext/2015/01/04/part-r-00021-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:50    7896339 elb/plaintext/2015/01/04/part-r-00022-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8321364 elb/plaintext/2015/01/04/part-r-00023-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51          0 elb/plaintext/2015/01/04_$folder$
2016-11-23 17:54:51    7641062 elb/plaintext/2015/01/05/part-r-00024-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51   10253377 elb/plaintext/2015/01/05/part-r-00025-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8502765 elb/plaintext/2015/01/05/part-r-00026-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51   11518464 elb/plaintext/2015/01/05/part-r-00027-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    7945189 elb/plaintext/2015/01/05/part-r-00028-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    7864475 elb/plaintext/2015/01/05/part-r-00029-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51          0 elb/plaintext/2015/01/05_$folder$
2016-11-23 17:54:51   11342140 elb/plaintext/2015/01/06/part-r-00030-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:51    8063755 elb/plaintext/2015/01/06/part-r-00031-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9387508 elb/plaintext/2015/01/06/part-r-00032-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9732343 elb/plaintext/2015/01/06/part-r-00033-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52   11510326 elb/plaintext/2015/01/06/part-r-00034-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    9148117 elb/plaintext/2015/01/06/part-r-00035-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52          0 elb/plaintext/2015/01/06_$folder$
2016-11-23 17:54:52    8402024 elb/plaintext/2015/01/07/part-r-00036-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52    8282860 elb/plaintext/2015/01/07/part-r-00037-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:52   11575283 elb/plaintext/2015/01/07/part-r-00038-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53    8149059 elb/plaintext/2015/01/07/part-r-00039-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53   10037269 elb/plaintext/2015/01/07/part-r-00040-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53   10019678 elb/plaintext/2015/01/07/part-r-00041-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt
2016-11-23 17:54:53          0 elb/plaintext/2015/01/07_$folder$
2016-11-23 17:54:53          0 elb/plaintext/2015/01_$folder$
2016-11-23 17:54:53          0 elb/plaintext/2015_$folder$
```

#### Esecuzione di ALTER TABLE ADD PARTITION
<a name="run-alter-table-add-partition"></a>

Poiché i dati non sono in formato Hive, non è possibile utilizzare il comando `MSCK REPAIR TABLE` per aggiungere le partizioni alla tabella dopo averla creata. Invece, è possibile utilizzare il comando [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) per aggiungere manualmente ogni partizione. Ad esempio, per caricare i dati in s3://athena-examples - *myregion* /elb/plaintext/2015/01/01/, puoi eseguire la seguente query. Si noti che non è richiesta una colonna di partizione separata per ogni cartella Amazon S3 e che il valore della chiave di partizione può essere diverso dalla chiave Amazon S3.

```
ALTER TABLE elb_logs_raw_native_part ADD PARTITION (dt='2015-01-01') location 's3://athena-examples-us-west-1/elb/plaintext/2015/01/01/'
```

Se esiste già una partizione, viene visualizzato l'errore Partizione già esistente. Per evitare questo errore, è possibile utilizzare la clausola `IF NOT EXISTS`. Per ulteriori informazioni, consulta [ALTER TABLE ADD PARTITION](alter-table-add-partition.md). Per rimuovere una partizione, è possibile utilizzare [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md). 

## Considera la proiezione delle partizioni
<a name="partitions-partition-projection"></a>

Per evitare di dover gestire le partizioni, è possibile utilizzare la proiezione delle partizioni. La proiezione delle partizioni è un'opzione per tabelle altamente partizionate la cui struttura è nota in anticipo. Nella proiezione delle partizioni, i valori e le posizioni delle partizioni vengono calcolati dalle proprietà della tabella configurate piuttosto che dalla lettura da un repository di metadati. Poiché i calcoli in memoria sono più veloci della ricerca remota, l'uso della proiezione delle partizioni può ridurre significativamente i tempi di esecuzione delle query. 

Per ulteriori informazioni, consulta [Proiezione delle partizioni con Amazon Athena](partition-projection.md).

## Altre risorse
<a name="partitions-additional-resources"></a>
+ Per informazioni sulle opzioni di partizionamento per i dati Kinesis Data Firehose, consultare [Esempio di Amazon Data Firehose](partition-projection-kinesis-firehose-example.md).
+ È inoltre possibile automatizzare l'aggiunta di partizioni utilizzando il [driver JDBC](connect-with-jdbc.md). 
+ È possibile utilizzare CTAS e INSERT INTO per partizionare un set di dati. Per ulteriori informazioni, consulta [Utilizzare CTAS e INSERT INTO per ETL e analisi dei dati](ctas-insert-into-etl.md).