

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# So verwenden Sie benutzerdefinierte Präfixen und dynamische Partitionierung
<a name="partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning"></a>

Firehose kann mit [benutzerdefinierten Präfixen](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) und [dynamischer Partitionierung](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html) konfiguriert werden. Mit diesen Features können Sie die Amazon-S3-Schlüssel konfigurieren und Partitionierungsschemata einrichten, die Ihren Anwendungsfall besser unterstützen. Sie können auch die Partitionsprojektion mit diesen Partitionierungsschemas verwenden und entsprechend konfigurieren.

Sie könnten beispielsweise das Feature des benutzerdefinierten Präfixes verwenden, um Amazon-S3-Schlüssel mit ISO-formatierten Daten anstelle des Standard-`yyyy/MM/dd/HH`-Schemas zu erhalten.

Sie können auch benutzerdefinierte Präfixe mit dynamischer Partitionierung kombinieren, um eine Eigenschaft wie `customer_id` aus Firehose-Nachrichten zu extrahieren, wie im folgenden Beispiel.

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

Mit diesem Amazon-S3-Präfix würde der Firehose-Bereitstellungsdatenstrom Objekte in Schlüssel wie `s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension` schreiben. Für eine Eigenschaft wie `customer_id`, bei der die Werte möglicherweise nicht im Voraus bekannt sind, können Sie den Partitionsprojektionstyp `injected` verwenden und eine `CREATE TABLE`-Anweisung wie die folgende verwenden:

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

Wenn Sie eine Tabelle mit einem Partitionsschlüssel vom Typ `injected` abfragen, muss Ihre Abfrage einen Wert für diesen Partitionsschlüssel enthalten. Eine Abfrage für die `my_ingested_data3`-Tabelle könnte so aussehen:

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

## Verwenden Sie den DATE-Typ für den Tagespartitionsschlüssel
<a name="partition-projection-kinesis-firehose-example-iso-formatted-dates"></a>

Da die Werte für den Partitionsschlüssel `day` ISO-formatiert sind, können Sie anstelle von `STRING` auch den Typ `DATE` für den Partitionsschlüssel Tag verwenden, wie im folgenden Beispiel:

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

Wenn Sie eine Abfrage durchführen, können Sie mit dieser Strategie Datumsfunktionen für den Partitionsschlüssel verwenden, ohne sie zu analysieren oder umzuwandeln, wie im folgenden Beispiel:

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

**Anmerkung**  
Wenn Sie einen Partitionsschlüssel dieses `DATE`-Typs angeben, wird davon ausgegangen, dass Sie das Feature für das [benutzerdefinierte Präfix](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) verwendet haben, um Amazon-S3-Schlüssel mit ISO-formatierten Datumsangaben zu erstellen. Wenn Sie das Standardformat `yyyy/MM/dd/HH` von Firehose verwenden, müssen Sie den Partitionsschlüssel als Typ `string` angeben, obwohl die entsprechende Tabelleneigenschaft vom Typ `date` ist, wie im folgenden Beispiel:  

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