

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

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

Bucketing adalah cara untuk mengatur catatan dataset ke dalam kategori yang disebut bucket.

Arti bucket dan bucketing ini berbeda dari, dan jangan bingung dengan, ember Amazon S3. Dalam bucketing data, catatan yang memiliki nilai yang sama untuk properti masuk ke bucket yang sama. Catatan didistribusikan secara merata di antara ember sehingga setiap bucket memiliki jumlah data yang kira-kira sama.

Dalam praktiknya, bucket adalah file, dan fungsi hash menentukan bucket yang masuk ke dalam rekaman. Dataset yang diselimuti akan memiliki satu atau lebih file per bucket per partisi. Bucket yang dimiliki file dikodekan dalam nama file.

## Manfaat Bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-benefits"></a>

Bucketing berguna ketika kumpulan data diselimuti oleh properti tertentu dan Anda ingin mengambil catatan di mana properti tersebut memiliki nilai tertentu. Karena datanya diselimuti, Athena dapat menggunakan nilainya untuk menentukan file mana yang akan dilihat. Misalnya, dataset diselimuti oleh `customer_id` dan Anda ingin menemukan semua catatan untuk pelanggan tertentu. Athena menentukan ember yang berisi catatan itu dan hanya membaca file di ember itu.

Kandidat yang baik untuk bucketing terjadi ketika Anda memiliki kolom yang memiliki kardinalitas tinggi (yaitu, memiliki banyak nilai berbeda), terdistribusi secara seragam, dan Anda sering meminta nilai tertentu.

**catatan**  
Athena tidak mendukung penggunaan `INSERT INTO` untuk menambahkan catatan baru ke tabel berember.

## Tipe data yang didukung untuk pemfilteran pada kolom berember
<a name="ctas-partitioning-and-bucketing-data-types-supported-for-filtering-on-bucketed-columns"></a>

Anda dapat menambahkan filter pada kolom berember dengan tipe data tertentu. Athena mendukung penyaringan pada kolom berember dengan tipe data berikut:
+ BOOLEAN
+ BYTE
+ DATE
+ DOUBLE
+ FLOAT
+ INT
+ LONG
+ SHORT
+ STRING
+ VARCHAR

## Dukungan Hive dan Spark
<a name="ctas-partitioning-and-bucketing-hive-and-spark-support"></a>

Mesin Athena versi 2 mendukung kumpulan data yang diselimuti menggunakan algoritma bucket Hive, dan mesin Athena versi 3 juga mendukung algoritma bucketing Apache Spark. Bucketing sarang adalah default. Jika kumpulan data Anda diselimuti menggunakan algoritma Spark, gunakan `TBLPROPERTIES` klausa untuk menyetel nilai properti. `bucketing_format` `spark`

**catatan**  
Athena memiliki batas 100 partisi dalam kueri `CREATE TABLE AS SELECT` ([CTAS](ctas.md)). Demikian pula, Anda hanya dapat menambahkan maksimum 100 partisi ke tabel tujuan dengan [INSERT INTO](insert-into.md) pernyataan.  
Jika Anda melebihi batasan ini, Anda mungkin menerima pesan kesalahan HIVE\$1TOO\$1MANY\$1OPEN\$1PARTITIONS: Melebihi batas 100 penulis terbuka untuk partisi/ember. Untuk mengatasi batasan ini, Anda dapat menggunakan pernyataan CTAS dan serangkaian `INSERT INTO` pernyataan yang membuat atau menyisipkan hingga 100 partisi masing-masing. Untuk informasi selengkapnya, lihat [Gunakan CTAS dan INSERT INTO untuk bekerja di sekitar batas partisi 100](ctas-insert-into.md).

## Bucketing CREATE TABLE contoh
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-example"></a>

Untuk membuat tabel untuk dataset bucketed yang ada, gunakan klausa yang diikuti oleh `CLUSTERED BY (column)` klausa. `INTO N BUCKETS` `INTO N BUCKETS`Klausa menentukan jumlah ember yang dimasukkan ke dalam data.

Dalam `CREATE TABLE` contoh berikut, `sales` kumpulan data dimasukkan `customer_id` ke dalam 8 ember menggunakan algoritma Spark. `CREATE TABLE`Pernyataan menggunakan `TBLPROPERTIES` klausa `CLUSTERED BY` and untuk mengatur properti yang sesuai.

```
CREATE EXTERNAL TABLE sales (...) 
... 
CLUSTERED BY (`customer_id`) INTO 8 BUCKETS 
... 
TBLPROPERTIES ( 
  'bucketing_format' = 'spark' 
)
```

## Bucketing CREATE TABLE AS (CTAS) contoh
<a name="ctas-partitioning-and-bucketing-bucketing-create-table-as-example"></a>

Untuk menentukan ember dengan`CREATE TABLE AS`, gunakan `bucket_count` parameter `bucketed_by` dan, seperti pada contoh berikut.

```
CREATE TABLE sales 
WITH ( 
  ... 
  bucketed_by = ARRAY['customer_id'], 
  bucket_count = 8 
) 
AS SELECT ...
```

## Contoh kueri bucketing
<a name="ctas-partitioning-and-bucketing-bucketing-query-example"></a>

Contoh kueri berikut mencari nama-nama produk yang telah dibeli pelanggan tertentu selama seminggu.

```
SELECT DISTINCT product_name 
FROM sales 
WHERE sales_date BETWEEN '2023-02-27' AND '2023-03-05' 
AND customer_id = 'c123'
```

Jika tabel ini dipartisi oleh `sales_date` dan dikantongi oleh`customer_id`, Athena dapat menghitung ember tempat catatan pelanggan berada. Paling-paling, Athena membaca satu file per partisi.