Hive View dan Pengindeksan: Membuatnya dengan Contoh
⚡ Ringkasan Cerdas
View di Hive adalah kueri tersimpan yang berperilaku seperti tabel hanya baca, sedangkan indeks adalah penunjuk ke kolom yang mempercepat pencarian, dan keduanya dibuat dengan pernyataan HiveQL singkat seperti yang ditunjukkan di sini.

Apa itu Pemandangan?
View mirip dengan tabel, dan dibuat berdasarkan kebutuhan. View adalah objek yang sepenuhnya logis tanpa penyimpanan sendiri: Hive hanya menyimpan teks kueri di metastore dan mengevaluasinya setiap kali view dirujuk.
- Kita dapat menyimpan data kumpulan hasil apa pun sebagai tampilan di Hive
- Penggunaannya mirip dengan tampilan yang digunakan di SQL
- View bersifat hanya baca, sehingga tidak dapat menjadi target pernyataan LOAD, INSERT, atau ALTER yang menulis data.
Penciptaan Tampilan:
sintaks:
Create VIEW <VIEWNAME> AS SELECT
Bentuk lengkap yang didokumentasikan juga menerima klausa IF NOT EXISTS dan daftar kolom opsional, yang berguna ketika daftar SELECT berisi ekspresi dan bukan hanya nama kolom biasa.
Contoh:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Dalam contoh ini, kita membuat tampilan Sample_View, yang menampilkan semua nilai baris dengan bidang gaji lebih besar dari 25000. Filter berada di dalam tampilan, sehingga setiap kueri yang memilih dari Sample_View hanya akan melihat baris-baris tersebut.
Apa itu Indeks?
Indeks adalah penunjuk ke nama kolom tertentu dalam sebuah tabel. Tujuan indeks adalah untuk meningkatkan kecepatan pencarian: tanpa indeks, kueri dengan predikat seperti DI MANA tab1.col1 = 10 Memuat seluruh tabel atau partisi dan memproses setiap baris, sedangkan indeks pada col1 memungkinkan Hive untuk hanya membaca sebagian dari file.
- Pengguna harus menentukan indeks secara manual
- Di mana pun kita membuat indeks, itu berarti kita membuat penunjuk ke nama kolom tertentu dalam tabel.
- Setiap perubahan yang dilakukan pada kolom yang ada di dalam tabel akan disimpan menggunakan nilai indeks yang dibuat pada nama kolom tersebut.
Peningkatan kecepatan tersebut tidak gratis. Pembuatan indeks membutuhkan pemrosesan tambahan, dan indeks itu sendiri menempati ruang disk yang harus dipelihara bersamaan dengan tabel.
sintaks:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Contoh:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Di sini kita membuat indeks pada tabel guruhive_internaltable untuk kolom bernama id. Perhatikan bahwa pernyataan lengkap pada rilis yang masih mendukung pengindeksan juga memerlukan klausa penanganan indeks, yang akan dijelaskan secara lengkap di bagian selanjutnya.
Perbedaan Antara View dan Index di Hive
View dan index sering diperkenalkan bersamaan karena keduanya berada di atas tabel yang sudah ada, tetapi keduanya menyelesaikan masalah yang berbeda. View mengubah apa yang dilihat oleh query, sedangkan index mengubah seberapa cepat Hive menemukannya. Tabel di bawah ini membandingkan keduanya.
| Aspek | Liha | Indeks |
|---|---|---|
| Apa yang disimpannya | Hanya pernyataan SELECT, di metastore | Tabel indeks terpisah yang menyimpan penunjuk ke data. |
| Tujuan | Sederhanakan atau batasi apa yang dikembalikan oleh sebuah kueri. | Kurangi jumlah data yang dipindai untuk suatu predikat. |
| Biaya disk | None | Penyimpanan tambahan plus pembangunan ulang setelah perubahan data |
| Akses tulis | Read-only | Tidak ditanyakan secara langsung; pengoptimal menggunakannya. |
| Status terkini | Didukung penuh | Dihapus di Hive 3.0 |
Dalam praktiknya, tampilan (view) dibuat untuk meningkatkan keterbacaan dan kontrol akses, sedangkan indeks dibuat semata-mata untuk meningkatkan kinerja pada kolom tertentu.
Jenis-Jenis Indeks di Hive Beserta Sintaksnya
Rilis hingga Hive 2.x menyertakan dua penangan indeks, dan penangan tersebut disebutkan dalam klausa AS yang wajib. Pengindeksan ringkas hadir di Hive 0.7.0 dan pengindeksan bitmap di Hive 0.8.0.
- Indeks ringkas: Metode ini menyimpan nilai bersama dengan alamat blok HDFS yang memuatnya, alih-alih mencatat lokasi setiap kemunculannya. Metode ini cocok untuk kolom dengan banyak nilai berbeda.
- Indeks bitmap: menyimpan bitmap untuk setiap nilai yang berbeda, yang merupakan pendekatan umum untuk kolom dengan hanya sejumlah kecil nilai yang berbeda, seperti bendera status atau jenis kelamin.
Indeks ringkas dibuat, dicantumkan, dan dihapus sebagai berikut:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Opsi WITH DEFERRED REBUILD mendaftarkan indeks tanpa mengisinya, sehingga pembuatan indeks dapat dijadwalkan secara terpisah dengan ALTER INDEX. Indeks bitmap dibuat dengan cara yang sama, dengan nama handler yang berbeda:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Indeks tidak diperbarui secara otomatis. Setiap kali tabel dasar menerima data baru, perintah ALTER INDEX … REBUILD harus dijalankan lagi, dan pada tabel yang dipartisi, pembaruan indeks dapat dibatasi hanya pada satu partisi.
Mengapa Pengindeksan Dihapus di Hive 3.0?
Pengindeksan dihapus dari Hive pada versi 3.0 di bawah HIVE-18448, sehingga CREATE INDEX, SHOW INDEX, dan DROP INDEX tidak lagi ada pada klaster saat ini. Fitur ini jarang sepadan dengan biaya pembangunan ulangnya setelah penyimpanan berbasis kolom dan pengoptimal berbasis biaya menjadi lebih matang. Tiga pengganti mencakup hal yang sama.
- Tampilan materialisasi: diperkenalkan di Hive 3.0.0, sebuah pandangan terwujud menyimpan hasil kueri yang telah dihitung sebelumnya dan pengoptimal secara otomatis menulis ulang kueri yang masuk berdasarkan hasil tersebut.
- Format berkas kolom: ORC dan Parquet memiliki indeks ringan dan statistik min/max sendiri, sehingga pembaca dapat melewati seluruh strip, blok, atau file tanpa indeks yang ditentukan pengguna.
- Partisi dan bucket: partisi dan bucketing Pangkas data pada tingkat direktori dan file, yang biasanya menghilangkan lebih banyak input daripada yang pernah dilakukan oleh sebuah indeks.
Pada Hive 2.x, indeks masih valid, tetapi pekerjaan baru akan lebih baik dilakukan dengan salah satu opsi di atas.
