

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.

# Comment utiliser des préfixes personnalisés et le partitionnement dynamique
<a name="partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning"></a>

Firehose peut être configuré pour utiliser des [préfixes personnalisés](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) et le [partitionnement dynamique](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html). À l'aide de ces fonctions, vous pouvez configurer les clés Amazon S3 et configurer des schémas de partitionnement qui prennent mieux en charge votre cas d'utilisation. Vous pouvez également utiliser la projection de partitions avec ces schémas de partitionnement et les configurer en conséquence.

Par exemple, vous pouvez utiliser la fonction de préfixe personnalisé pour obtenir des clés Amazon S3 dont les dates sont au format ISO au lieu du schéma par défaut `yyyy/MM/dd/HH`.

Vous pouvez également combiner des préfixes personnalisés avec le partitionnement dynamique pour extraire une propriété telle que `customer_id` de messages Firehose, comme illustré dans l’exemple suivant.

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

Avec ce préfixe Amazon S3, le flux de diffusion Firehose écrit les objets dans des clés telles que `s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension`. Pour une propriété comme `customer_id`, où les valeurs peuvent ne pas être connues à l'avance, vous pouvez utiliser le type de projection de partition `injected` et utilisez une instruction `CREATE TABLE` comme suit :

```
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}/"
)
```

Lorsque vous interrogez une table comportant une clé de partition de type `injected`, votre requête doit inclure une valeur pour cette clé de partition. Une requête pour la table `my_ingested_data3` pourrait ressembler à ceci :

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

## Utilisation du type DATE pour la clé de partition de jour
<a name="partition-projection-kinesis-firehose-example-iso-formatted-dates"></a>

Comme les valeurs de la clé de partition `day` sont au format ISO, vous pouvez également utiliser le type `DATE` pour la clé de partition day au lieu de `STRING`, comme dans l'exemple suivant :

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

Lorsque vous effectuez une requête, cette stratégie vous permet d'utiliser des fonctions de date sur la clé de partition sans analyse ni diffusion, comme dans l'exemple suivant :

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

**Note**  
La spécification d'une clé de partition du type `DATE` suppose que vous avez utilisé la fonctionnalité de [préfixe personnalisé](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) pour créer des clés Amazon S3 dont les dates sont au format ISO. Si vous utilisez le format Firehose par défaut `yyyy/MM/dd/HH`, vous devez spécifier la clé de partition comme type `string`, même si la propriété de table correspondante est de type `date`, comme dans l’exemple suivant :  

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