

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

# Apa itu partisi?
<a name="ctas-partitioning-and-bucketing-what-is-partitioning"></a>

Partisi berarti mengatur data ke dalam direktori (atau “awalan”) di Amazon S3 berdasarkan properti data tertentu. Properti seperti itu disebut kunci partisi. Kunci partisi umum adalah tanggal atau satuan waktu lainnya seperti tahun atau bulan. Namun, dataset dapat dipartisi oleh lebih dari satu kunci. Misalnya, data tentang penjualan produk dapat dipartisi berdasarkan tanggal, kategori produk, dan pasar.

## Memutuskan cara partisi
<a name="ctas-partitioning-and-bucketing-deciding-how-to-partition"></a>

Kandidat yang baik untuk kunci partisi adalah properti yang selalu atau sering digunakan dalam kueri dan memiliki kardinalitas rendah. Ada trade-off antara memiliki terlalu banyak partisi dan memiliki terlalu sedikit. Dengan terlalu banyak partisi, peningkatan jumlah file menciptakan overhead. Ada juga beberapa overhead dari penyaringan partisi itu sendiri. Dengan terlalu sedikit partisi, kueri seringkali harus memindai lebih banyak data.

## Buat tabel yang dipartisi
<a name="ctas-partitioning-and-bucketing-creating-a-partitioned-table"></a>

Saat kumpulan data dipartisi, Anda dapat membuat tabel yang dipartisi di Athena. Tabel yang dipartisi adalah tabel yang memiliki kunci partisi. Saat Anda menggunakan`CREATE TABLE`, Anda menambahkan partisi ke tabel. Saat Anda menggunakan`CREATE TABLE AS`, partisi yang dibuat di Amazon S3 secara otomatis ditambahkan ke tabel.

Dalam sebuah `CREATE TABLE` pernyataan, Anda menentukan kunci partisi dalam `PARTITIONED BY (column_name data_type)` klausa. Dalam sebuah `CREATE TABLE AS` pernyataan, Anda menentukan kunci partisi dalam `WITH (partitioned_by = ARRAY['partition_key'])` klausa, atau `WITH (partitioning = ARRAY['partition_key'])` untuk tabel Iceberg. Untuk alasan kinerja, kunci partisi harus selalu bertipe`STRING`. Untuk informasi selengkapnya, lihat [Gunakan string sebagai tipe data untuk kunci partisi](data-types-timestamps.md#data-types-timestamps-partition-key-types).

Untuk detail tambahan `CREATE TABLE` dan `CREATE TABLE AS` sintaks, lihat [CREATE TABLE](create-table.md) dan[Properti tabel CTAS](create-table-as.md#ctas-table-properties).

## Tabel yang dipartisi kueri
<a name="ctas-partitioning-and-bucketing-querying-partitioned-tables"></a>

Saat Anda menanyakan tabel yang dipartisi, Athena menggunakan predikat dalam kueri untuk memfilter daftar partisi. Kemudian menggunakan lokasi partisi yang cocok untuk memproses file yang ditemukan. Athena dapat secara efisien mengurangi jumlah data yang dipindai hanya dengan tidak membaca data di partisi yang tidak cocok dengan predikat kueri.

### Contoh
<a name="ctas-partitioning-and-bucketing-partitioned-table-example-queries"></a>

Misalkan Anda memiliki tabel yang dipartisi oleh `sales_date` `product_category` dan dan ingin mengetahui total pendapatan selama seminggu dalam kategori tertentu. Anda menyertakan `sales_date` predikat pada `product_category` kolom dan untuk memastikan bahwa Athena hanya memindai jumlah minimum data, seperti pada contoh berikut.

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND product_category = 'Toys'
```

Misalkan Anda memiliki kumpulan data yang dipartisi berdasarkan tanggal tetapi juga memiliki stempel waktu berbutir halus.

Dengan tabel Iceberg, Anda dapat mendeklarasikan kunci partisi untuk memiliki hubungan dengan kolom, tetapi dengan tabel Hive mesin kueri tidak memiliki pengetahuan tentang hubungan antara kolom dan kunci partisi. Untuk alasan ini, Anda harus menyertakan predikat pada kolom dan kunci partisi dalam kueri Anda untuk memastikan kueri tidak memindai lebih banyak data daripada yang diperlukan.

Misalnya, `sales` tabel pada contoh sebelumnya juga memiliki `sold_at` kolom tipe `TIMESTAMP` data. Jika Anda menginginkan pendapatan hanya untuk rentang waktu tertentu, Anda akan menulis kueri seperti ini:

```
SELECT SUM(amount) AS total_revenue 
FROM sales 
WHERE sales_date = '2023-02-28' 
AND sold_at BETWEEN TIMESTAMP '2023-02-28 10:00:00' AND TIMESTAMP '2023-02-28 12:00:00' 
AND product_category = 'Toys'
```

Untuk informasi selengkapnya tentang perbedaan antara menanyakan tabel Hive dan Iceberg, lihat. [Cara menulis kueri untuk bidang stempel waktu yang juga dipartisi waktu](data-types-timestamps.md#data-types-timestamps-how-to-write-queries-for-timestamp-fields-that-are-also-time-partitioned)