Apa itu bucketing? - Amazon Athena

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

Apa itu bucketing?

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

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

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

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. Demikian pula, Anda hanya dapat menambahkan maksimum 100 partisi ke tabel tujuan dengan INSERT INTO pernyataan.

Jika Anda melebihi batasan ini, Anda mungkin menerima pesan kesalahan HIVE_ _ _ TOO MANY OPEN _PARTITIONS: Melebihi batas 100 penulis terbuka untuk partisi/ember. Untuk mengatasi batasan ini, Anda dapat menggunakan CTAS pernyataan 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.

Untuk membuat tabel untuk dataset bucketed yang ada, gunakan klausa yang diikuti oleh CLUSTERED BY (column) klausa. INTO N BUCKETS INTO N BUCKETSKlausa 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 TABLEPernyataan 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' )

Untuk menentukan ember denganCREATE 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 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 olehcustomer_id, Athena dapat menghitung ember tempat catatan pelanggan berada. Paling-paling, Athena membaca satu file per partisi.