

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Cara menggunakan awalan khusus dan partisi dinamis
<a name="partition-projection-kinesis-firehose-example-using-custom-prefixes-and-dynamic-partitioning"></a>

[Firehose dapat dikonfigurasi dengan [awalan khusus dan partisi dinamis.](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html)](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html) Dengan menggunakan fitur-fitur ini, Anda dapat mengonfigurasi kunci Amazon S3 dan menyiapkan skema partisi yang mendukung kasus penggunaan Anda dengan lebih baik. Anda juga dapat menggunakan proyeksi partisi dengan skema partisi ini dan mengkonfigurasinya sesuai dengan itu.

Misalnya, Anda dapat menggunakan fitur awalan khusus untuk mendapatkan kunci Amazon S3 yang memiliki tanggal berformat ISO, bukan skema default. `yyyy/MM/dd/HH`

Anda juga dapat menggabungkan awalan kustom dengan partisi dinamis untuk mengekstrak properti seperti dari pesan `customer_id` Firehose, seperti pada contoh berikut.

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

Dengan awalan Amazon S3 itu, aliran pengiriman Firehose akan menulis objek ke kunci seperti. `s3://amzn-s3-demo-bucket/prefix/2021-11-01/customer-1234/file.extension` Untuk properti seperti`customer_id`, di mana nilainya mungkin tidak diketahui sebelumnya, Anda dapat menggunakan jenis proyeksi partisi `injected` dan menggunakan `CREATE TABLE` pernyataan seperti berikut:

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

Saat Anda menanyakan tabel yang memiliki jenis kunci partisi`injected`, kueri Anda harus menyertakan nilai untuk kunci partisi tersebut. Kueri untuk `my_ingested_data3` tabel mungkin terlihat seperti ini:

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

## Gunakan tipe DATE untuk kunci partisi hari
<a name="partition-projection-kinesis-firehose-example-iso-formatted-dates"></a>

Karena nilai untuk kunci `day` partisi diformat ISO, Anda juga dapat menggunakan `DATE` tipe untuk kunci partisi hari alih-alih`STRING`, seperti pada contoh berikut:

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

Saat Anda melakukan kueri, strategi ini memungkinkan Anda untuk menggunakan fungsi tanggal pada kunci partisi tanpa parsing atau casting, seperti pada contoh berikut:

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

**catatan**  
Menentukan kunci partisi dari `DATE` jenis mengasumsikan bahwa Anda telah menggunakan fitur [awalan khusus](https://docs.aws.amazon.com/firehose/latest/dev/s3-prefixes.html) untuk membuat kunci Amazon S3 yang memiliki tanggal berformat ISO. Jika Anda menggunakan format Firehose default`yyyy/MM/dd/HH`, Anda harus menentukan kunci partisi sebagai tipe `string` meskipun properti tabel yang sesuai adalah tipe`date`, seperti pada contoh berikut:  

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