

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

# Bekerja dengan data stempel waktu
<a name="data-types-timestamps"></a>

Bagian ini menjelaskan beberapa pertimbangan untuk bekerja dengan data stempel waktu di Athena.

**catatan**  
Perawatan stempel waktu agak berubah antara versi mesin sebelumnya dan mesin Athena versi 3. Untuk informasi tentang kesalahan terkait stempel waktu yang dapat terjadi di mesin Athena versi 3 dan solusi yang disarankan, lihat di referensi. [Perubahan stempel waktu](engine-versions-reference-0003.md#engine-versions-reference-0003-timestamp-changes) [Mesin Athena versi 3](engine-versions-reference-0003.md)

## Format untuk menulis data stempel waktu ke objek Amazon S3
<a name="data-types-timestamps-writing-to-s3-objects"></a>

Format di mana data stempel waktu harus ditulis ke objek Amazon S3 bergantung pada tipe data kolom dan pustaka [SerDeyang](https://docs.aws.amazon.com/athena/latest/ug/supported-serdes.html) Anda gunakan.
+ Jika Anda memiliki kolom tabel tipe`DATE`, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format ISO`YYYY-MM-DD`, atau tipe tanggal bawaan seperti untuk Parket atau ORC.
+ Jika Anda memiliki kolom tabel tipe`TIME`, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format ISO`HH:MM:SS`, atau tipe waktu bawaan seperti untuk Parket atau ORC.
+ Jika Anda memiliki kolom tabel tipe`TIMESTAMP`, Athena mengharapkan kolom atau properti data yang sesuai menjadi string dalam format `YYYY-MM-DD HH:MM:SS.SSS` (perhatikan ruang antara tanggal dan waktu), atau tipe waktu bawaan seperti untuk Parket, ORC, atau Ion. Perhatikan bahwa Athena tidak menjamin perilaku stempel waktu yang tidak valid (misalnya,). `0000-00-00 08:00:00.000`
**catatan**  
Stempel waktu Open CSVSer De adalah pengecualian dan harus dikodekan sebagai zaman UNIX resolusi milidetik.

## Memastikan bahwa data yang dipartisi waktu cocok dengan bidang stempel waktu dalam catatan
<a name="data-types-timestamps-time-partitioned-data-and-timestamp-fields"></a>

Produsen data harus memastikan nilai partisi sejajar dengan data di dalam partisi. Misalnya, jika data Anda memiliki `timestamp` properti dan Anda menggunakan Firehose untuk memuat data ke Amazon S3, Anda harus [menggunakan partisi dinamis](https://docs.aws.amazon.com/firehose/latest/dev/dynamic-partitioning.html) karena partisi default Firehose adalah. wall-clock-based

## Gunakan string sebagai tipe data untuk kunci partisi
<a name="data-types-timestamps-partition-key-types"></a>

Untuk alasan kinerja, lebih baik digunakan `STRING` sebagai tipe data untuk kunci partisi. Meskipun Athena mengenali nilai partisi dalam format `YYYY-MM-DD` sebagai tanggal saat Anda menggunakan `DATE` tipe, ini dapat menyebabkan kinerja yang buruk. Untuk alasan ini, kami menyarankan Anda menggunakan tipe `STRING` data untuk kunci partisi sebagai gantinya.

## Cara menulis kueri untuk bidang stempel waktu yang juga dipartisi waktu
<a name="data-types-timestamps-how-to-write-queries-for-timestamp-fields-that-are-also-time-partitioned"></a>

Cara Anda menulis kueri untuk bidang stempel waktu yang dipartisi waktu tergantung pada jenis tabel yang ingin Anda kueri.

### Tabel sarang
<a name="data-types-timestamps-hive-tables"></a>

Dengan tabel Hive yang paling umum digunakan di Athena, mesin kueri tidak memiliki pengetahuan tentang hubungan antara kolom dan kunci partisi. Untuk alasan ini, Anda harus selalu menambahkan predikat dalam kueri Anda untuk kolom dan kunci partisi.

Misalnya, Anda memiliki `event_time` kolom dan kunci `event_date` partisi dan ingin menanyakan peristiwa antara pukul 23:00 dan 03:00. Dalam hal ini, Anda harus menyertakan predikat dalam kueri Anda untuk kolom dan kunci partisi, seperti pada contoh berikut.

```
WHERE event_time BETWEEN start_time AND end_time 
  AND event_date BETWEEN start_time_date AND end_time_date
```

### Tabel gunung es
<a name="data-types-timestamps-iceberg-tables"></a>

Dengan tabel Iceberg, Anda dapat menggunakan nilai partisi yang dihitung, yang menyederhanakan kueri Anda. Misalnya, tabel Iceberg Anda dibuat dengan `PARTITIONED BY` klausa seperti berikut:

```
PARTITIONED BY (event_date month(event_time))
```

Dalam hal ini, mesin kueri secara otomatis memangkas partisi berdasarkan nilai predikat. `event_time` Karena itu, kueri Anda hanya perlu menentukan predikat untuk`event_time`, seperti pada contoh berikut.

```
WHERE event_time BETWEEN start_time AND end_time
```

Untuk informasi selengkapnya, lihat [Buat tabel Iceberg](querying-iceberg-creating-tables.md).

Saat menggunakan partisi tersembunyi Iceberg untuk kolom timestamp, Iceberg mungkin membuat partisi pada kolom tabel yang dibangun yang berasal dari kolom timestamp dan diubah menjadi tanggal untuk partisi yang lebih efektif. Misalnya, mungkin dibuat `event_date` dari kolom stempel waktu `event_time` dan secara otomatis mempartisi aktif. `event_date` Dalam hal ini, **jenis** partisi adalah **tanggal**.

Untuk kinerja kueri yang optimal saat Anda menggunakan partisi, filter pada rentang hari penuh untuk mengaktifkan pushdown predikat. Misalnya, kueri berikut tidak akan ditekan ke bawah karena rentang tidak dapat dikonversi ke partisi tanggal tunggal, meskipun jatuh dalam satu hari:

```
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-18 12:00:00'
```

Sebagai gantinya, gunakan rentang hari penuh untuk memungkinkan pushdown predikat dan meningkatkan kinerja kueri seperti pada contoh berikut.

```
WHERE event_time >= TIMESTAMP '2024-04-18 00:00:00' AND event_time < TIMESTAMP '2024-04-19 00:00:00'
```

Anda juga dapat menggunakan `BETWEEN start_time AND end_time` sintaks atau menggunakan rentang multi-hari selama bagian stempel waktu. `00:00:00`

Untuk informasi lebih lanjut, lihat [posting blog Trino](https://trino.io/blog/2023/04/11/date-predicates.html).