

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 utilizzare prefissi personalizzati e partizionamento dinamico
<a name="partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning"></a>

Firehose può essere configurato con [prefissi personalizzati](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) e [partizionamento dinamico](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html). Grazie a queste funzionalità, è possibile configurare le chiavi Amazon S3 e impostare schemi di partizionamento che supportano meglio il proprio caso d'uso. È inoltre possibile utilizzare la proiezione delle partizioni con questi schemi di partizionamento e configurarli di conseguenza.

Ad esempio, è possibile utilizzare la funzione di prefisso personalizzato per ottenere chiavi Amazon S3 con date formattate in ISO anziché lo schema `yyyy/MM/dd/HH` di default.

È inoltre possibile combinare i prefissi personalizzati con il partizionamento dinamico per estrarre una proprietà come `customer_id` dai messaggi Firehose, come nell’esempio seguente.

```
prefix/!{timestamp:yyyy}-!{timestamp:MM}-!{timestamp:dd}/!{partitionKeyFromQuery:customer_id}/
```

Con quel prefisso Amazon S3, il flusso di consegna di Firehose scriverebbe oggetti su chiavi come `s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension`. Per una proprietà come `customer_id` dove i valori potrebbero non essere noti in anticipo, è possibile utilizzare il tipo di proiezione della partizione `injected` e usare un'istruzione `CREATE TABLE` come la seguente:

```
CREATE EXTERNAL TABLE my_ingested_data3 (
 ...
)
...
PARTITIONED BY (
 day STRING,
 customer_id STRING
)
LOCATION "s3://amzn-s3-demo-bucket/prefix/"
TBLPROPERTIES (
 "projection.enabled" = "true",
 "projection.day.type" = "date",
 "projection.day.format" = "yyyy-MM-dd",
 "projection.day.range" = "2021-01-01,NOW",
 "projection.day.interval" = "1",
 "projection.day.interval.unit" = "DAYS",
 "projection.customer_id.type" = "injected",
 "storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/${day}/${customer_id}/"
)
```

Quando si esegue una query su una tabella con una chiave di partizione di tipo `injected`, la query deve includere un valore per quella chiave di partizione. Una query per la tabella `my_ingested_data3` potrebbe essere simile alla seguente:

```
SELECT *
FROM my_ingested_data3
WHERE day BETWEEN '2021-11-01' AND '2021-11-30'
AND customer_id = 'customer-1234'
```

## Utilizzare il tipo DATE per la chiave di partizione del giorno
<a name="partition-projection-kinesis-firehose-example-iso-formatted-dates"></a>

Perché i valori per la chiave di partizione `day` sono formattati in ISO, è anche possibile utilizzare il tipo `DATE` per la chiave di partizione del giorno invece di `STRING`, come nel seguente esempio:

```
PARTITIONED BY (day DATE, customer_id STRING)
```

Quando si esegue una query, questa strategia consente di utilizzare le funzioni data sulla chiave di partizione senza analizzare o eseguire il casting, come nell'esempio seguente:

```
SELECT *
FROM my_ingested_data3
WHERE day > CURRENT_DATE - INTERVAL '7' DAY
AND customer_id = 'customer-1234'
```

**Nota**  
La specificazione di una chiave di partizione di tipo `DATE` presuppone che per creare chiavi Amazon S3 con date in formato ISO sia stata utilizzata la funzionalità di [prefisso personalizzato](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html). Se utilizzi il formato predefinito di Firehose `yyyy/MM/dd/HH`, è necessario specificare la chiave di partizione di tipo `string` anche se la proprietà della tabella corrispondente è di tipo `date`, come mostra il seguente esempio:  

```
PARTITIONED BY ( 
  `mydate` string)
TBLPROPERTIES (
  'projection.enabled'='true', 
   ...
  'projection.mydate.type'='date',
  'storage.location.template'='s3://amzn-s3-demo-bucket/prefix/${mydate}')
```