

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

# Cos'è il raggruppamento in bucket?
<a name="ctas-partitioning-and-bucketing-what-is-bucketing"></a>

Il raggruppamento in bucket è un modo per organizzare i record di un set di dati in categorie chiamate bucket.

Questo significato di bucket and raggruppamento in bucket è diverso e non deve essere confuso con i bucket Amazon S3. Nel bucket di dati, i record che hanno lo stesso valore per una proprietà vengono inseriti nello stesso bucket. I record vengono distribuiti nel modo più uniforme possibile tra i bucket in modo che ogni bucket contenga all'incirca la stessa quantità di dati.

In pratica, i bucket sono file e una funzione hash determina il bucket in cui va inserito un record. Un set di dati con bucket avrà uno o più file per bucket per partizione. Il bucket a cui appartiene un file è codificato nel nome del file.

## Vantaggi del raggruppamento in bucket
<a name="ctas-partitioning-and-bucketing-bucketing-benefits"></a>

Il raggruppamento in bucket è utile quando un set di dati è inserito in un bucket in base a una determinata proprietà e si desidera recuperare i record in cui tale proprietà ha un determinato valore. Poiché i dati sono raggruppati in un bucket, Athena può utilizzare il valore per determinare quali file guardare. Ad esempio, supponi che un set di dati sia suddiviso in bucket in base a `customer_id` e che tu voglia trovare tutti i record di un cliente specifico. Athena determina il bucket che contiene tali record e legge solo i file in quel bucket.

I buoni candidati per il raggruppamento in bucket si presentano quando si hanno colonne con cardinalità elevata (ovvero molti valori distinti), sono distribuite uniformemente e vengono spesso eseguite interrogazioni per valori specifici.

**Nota**  
Athena non supporta l'utilizzo di `INSERT INTO` per aggiungere nuovi record alle tabelle bloccate.

## Tipi di dati supportati per il filtro su colonne con bucket
<a name="ctas-partitioning-and-bucketing-data-types-supported-for-filtering-on-bucketed-columns"></a>

Puoi aggiungere filtri su colonne separate con determinati tipi di dati. Athena supporta il filtraggio solo su colonne raggruppate per bucket con i seguenti tipi di dati:
+ BOOLEAN
+ BYTE
+ DATE
+ DOUBLE
+ FLOAT
+ INT
+ LONG
+ SHORT
+ STRING
+ VARCHAR

## Supporto per Hive e Spark
<a name="ctas-partitioning-and-bucketing-hive-and-spark-support"></a>

La versione 2 del motore Athena supporta i set di dati raggruppati utilizzando l'algoritmo bucket Hive e la versione 3 del motore Athena supporta anche l'algoritmo di raggruppamento in bucket Apache Spark. L'impostazione predefinita è il raggruppamento in bucket Hive. Se il tuo set di dati è raggruppato in bucket tramite l'algoritmo Spark, utilizza la clausola `TBLPROPERTIES` per impostare il valore della proprietà `bucketing_format` su `spark`.

**Nota**  
Athena ha un limite di 100 partizioni per query `CREATE TABLE AS SELECT` ([CTAS](ctas.md)). Allo stesso modo, puoi aggiungere un massimo di 100 partizioni a una tabella di destinazione con una dichiarazione [INSERT INTO](insert-into.md).  
Se superi questa limitazione potresti ricevere il messaggio di errore HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Exceeded limit of 100 open writers for partitions/buckets (HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: limite di 100 scrittori aperti per partizioni/bucket superato). Per ovviare questa limitazione, puoi utilizzare un'istruzione CTAS e una serie di istruzioni `INSERT INTO` che creano o inseriscono fino a 100 partizioni ciascuna. Per ulteriori informazioni, consulta [Utilizzare CTAS e INSERT INTO per aggirare il limite di 100 partizioni](ctas-insert-into.md).

## Esempio di raggruppamento in bucket di CREATE TABLE
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-example"></a>

Per creare una tabella per un set di dati raggruppato in bucket esistenti, utilizza la clausola `CLUSTERED BY (column)` seguita dalla clausola `INTO N BUCKETS`. La clausola `INTO N BUCKETS` specifica il numero di bucket in cui sono inseriti i dati.

Nell'esempio `CREATE TABLE` seguente, il set di dati `sales` viene suddiviso in 8 bucket in base a `customer_id` attraverso l'algoritmo Spark. L'istruzione `CREATE TABLE` utilizza le clausole `CLUSTERED BY` e `TBLPROPERTIES` per impostare le proprietà di conseguenza.

```
CREATE EXTERNAL TABLE sales (...) 
... 
CLUSTERED BY (`customer_id`) INTO 8 BUCKETS 
... 
TBLPROPERTIES ( 
  'bucketing_format' = 'spark' 
)
```

## Esempio di raggruppamento in bucket di CREATE TABLE AS (CTAS)
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-as-example"></a>

Per specificare il raggruppamento in bucket with`CREATE TABLE AS`, utilizzate i `bucket_count` parametri `bucketed_by` and, come nell'esempio seguente.

```
CREATE TABLE sales 
WITH ( 
  ... 
  bucketed_by = ARRAY['customer_id'], 
  bucket_count = 8 
) 
AS SELECT ...
```

## Esempio di query bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-query-example"></a>

La seguente query di esempio cerca i nomi dei prodotti che un cliente specifico ha acquistato nel corso di una settimana.

```
SELECT DISTINCT product_name 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND customer_id = 'c123'
```

Se questa tabella è partizionata in base a `sales_date` e raggruppata in bucket in base a `customer_id`, Athena può calcolare il bucket in cui si trovano i record dei clienti. Al massimo, Athena legge un file per partizione.