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.

  • ️ Pandangan ini logis: Sebuah view hanya menyimpan pernyataan SELECT-nya di metastore, sehingga tidak menempati ruang disk sendiri.
  • 🔒 Hanya dapat dibaca berdasarkan desain: Sebuah view tidak dapat menjadi target dari perintah LOAD, INSERT, atau ALTER, karena Hive mengevaluasinya ulang pada setiap kueri.
  • 📍 Indeks menunjukkan data: Indeks adalah penunjuk ke nilai kolom yang memungkinkan Hive membaca sebagian dari sebuah file, bukan seluruh tabel.
  • ️ Dua penangan: Pengindeksan kompak cocok untuk kolom dengan kardinalitas tinggi, sedangkan pengindeksan bitmap cocok untuk kolom dengan sedikit nilai berbeda.
  • 🔄 Pembangunan ulang manual: Indeks tidak pernah diperbarui secara otomatis, jadi perintah ALTER INDEX REBUILD harus dijalankan setelah perubahan pada tabel dasar.
  • 🚫 Dihapus di Hive 3.0: Pengindeksan dihilangkan pada HIVE-18448, dan digantikan oleh materialized views, penyimpanan ORC atau Parquet, dan partisi.

Penjelasan tentang view dan indeks di Hive beserta contohnya.

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.

Pertanyaan Umum Demo Slot

Perintah DROP VIEW view_name menghapusnya, dan ALTER VIEW view_name RENAME TO new_name mengubah namanya. Karena sebuah view tidak menyimpan data, maka perintah drop digunakan.ping Seseorang tidak pernah menyentuh tabel dasar; hanya entri metastore yang hilang.

Materialized view menyimpan hasil query yang telah dihitung sebelumnya sebagai data nyata, sehingga membutuhkan ruang disk dan memerlukan REBUILD. View biasa hanya menyimpan teks query dan dihitung ulang setiap kali diakses.

Tidak. Metastore hanya menyimpan pernyataan SELECT dan daftar kolom yang telah diselesaikan, tidak lebih. Setiap referensi menjalankan ulang kueri yang mendasarinya, itulah sebabnya tampilan pada join yang lambat tetap lambat.

Pada Hive 0.12.0 dan versi sebelumnya, nama indeks peka terhadap huruf besar dan kecil untuk perintah CREATE INDEX dan DROP INDEX, sedangkan ALTER INDEX membutuhkan huruf kecil. Hive 0.13.0 membuat nama indeks tidak peka terhadap huruf besar dan kecil untuk setiap perintah.

Ya, pada klaster modern mana pun. Pemangkasan partisi menghapus seluruh direktori sebelum pemindaian dimulai dan pengelompokan mempersempit penggabungan atau pengambilan sampel ke file tertentu, yang biasanya lebih baik daripada yang dapat diberikan oleh tabel indeks.

Alat pembelajaran mesin memprofilkan log kueri, memberi peringkat kolom predikat berdasarkan selektivitas dan frekuensi, serta menyarankan di mana tampilan materialisasi atau skema partisi akan memberikan hasil yang menguntungkan. Validasi setiap saran terhadap rencana EXPLAIN sebelum menerapkannya.

Fungsi ini menghasilkan pernyataan CREATE VIEW secara andal dari komentar singkat. Periksa hal-hal yang spesifik untuk versi tertentu, karena fungsi ini masih menghasilkan sintaks CREATE INDEX yang ditolak mentah-mentah oleh klaster Hive 3.0 atau yang lebih baru.

Indeks tersebut merupakan tabel penunjuk terpisah, dan Hive tidak pernah memperbaruinya ketika tabel dasar berubah. Tanpa pembangunan ulang, penunjuk akan menjadi usang, sehingga pengoptimal akan melewati indeks atau mengembalikan kecocokan yang sudah ketinggalan zaman.

Ringkaslah postingan ini dengan: