Hive Görünümü ve İndeksleme: Örneklerle Oluşturma
⚡ Akıllı Özet
Hive'da görünümler, salt okunur tablolar gibi davranan kaydedilmiş sorgulardır; indeksler ise aramaları hızlandıran sütunlara işaret eden göstericilerdir ve her ikisi de burada gösterilen kısa HiveQL ifadeleriyle oluşturulur.

Görünüm Nedir?
Görünümler tablolara benzer ve gereksinimlere göre oluşturulurlar. Bir görünüm, kendi başına herhangi bir depolama alanı olmayan tamamen mantıksal bir nesnedir: Hive, metastore'da yalnızca sorgu metnini saklar ve görünüm her referans edildiğinde bunu değerlendirir.
- Herhangi bir sonuç kümesi verisini Hive'da görünüm olarak kaydedebiliriz
- Kullanımı, kullanılan görünümlere benzer. SQL
- Görünüm salt okunur olduğundan, veri yazan bir LOAD, INSERT veya ALTER ifadesinin hedefi olamaz.
Görünümün Oluşturulması:
Sözdizimi:
Create VIEW <VIEWNAME> AS SELECT
Tam olarak belgelenmiş form ayrıca bir IF NOT EXISTS koşulunu ve isteğe bağlı bir sütun listesini de kabul eder; bu, SELECT listesi düz sütun adları yerine ifadeler içerdiğinde kullanışlıdır.
Örnek:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Bu örnekte, maaş alanı 25000'den büyük olan tüm satır değerlerini görüntüleyen Sample_View adlı bir görünüm oluşturuyoruz. Filtre, görünümün içinde yer alıyor, bu nedenle Sample_View'den seçim yapan herhangi bir sorgu yalnızca bu satırları görüyor.
İndeks Nedir?
İndeksler, bir tablonun belirli bir sütun adına işaret eden göstericilerdir. İndeksin amacı arama hızını artırmaktır: İndeks olmadan, şu gibi bir koşul içeren bir sorgu çok daha hızlı sonuç verir: WHERE tab1.col1 = 10 Bir `col1` indeksi, Hive'ın dosyanın yalnızca bir bölümünü okumasına izin verirken, `col1` indeksi tüm tabloyu veya bölümü yükler ve her satırı işler.
- Kullanıcının dizini manuel olarak tanımlaması gerekir
- Bir indeks oluşturduğumuz her yerde, tablonun belirli bir sütun adına işaret eden bir gösterici oluşturuyoruz demektir.
- Tabloda bulunan sütunda yapılan tüm değişiklikler, sütun adına oluşturulan indeks değeri kullanılarak saklanır.
Bu hız artışı bedelsiz değil. İndeks oluşturmak ek işlem gücü gerektiriyor ve indeksin kendisi, tabloyla birlikte korunması gereken disk alanını işgal ediyor.
Sözdizimi:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Örnek:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Burada, guruhive_internaltable tablosunda id sütunu için bir indeks oluşturuyoruz. İndekslemeyi hala destekleyen bir sürümde tam bir ifade için ayrıca bir index-handler maddesine de ihtiyaç duyulduğunu unutmayın; bu madde bir sonraki bölümde ayrıntılı olarak gösterilmektedir.
Hive'da Görünüm ve Dizin Arasındaki Fark
Görünümler ve indeksler genellikle birlikte ele alınır çünkü her ikisi de mevcut bir tablonun üzerinde yer alır, ancak farklı sorunları çözerler. Bir görünüm, sorgunun ne gördüğünü değiştirirken, bir indeks Hive'ın onu ne kadar hızlı bulduğunu değiştirir. Aşağıdaki tabloda bunların karşılaştırması verilmiştir.
| Görünüş | Görüntüle | indeks |
|---|---|---|
| Ne saklıyor? | Metastore'da yalnızca SELECT ifadesi yer alıyor. | Verilere işaretçiler içeren ayrı bir indeks tablosu. |
| Amaç | Bir sorgunun döndürdüğü sonuçları basitleştirin veya kısıtlayın. | Bir koşul için taranan veri miktarını azaltın. |
| Disk maliyeti | Hayır | Ek depolama alanı ve veri değişikliklerinden sonra yeniden oluşturma |
| Yazma erişimi | Salt okunur | Doğrudan sorgulanmıyor; optimizasyon algoritması bunu kullanıyor. |
| Mevcut durum | Tam destekli | Hive 3.0'da kaldırıldı. |
Pratikte, okunabilirlik ve erişim kontrolü için bir görünüm oluşturulurken, seçici bir sütun üzerinde performans amacıyla yalnızca bir indeks oluşturulmuştur.
Hive'da Dizin Türleri ve Sözdizimi
Hive 2.x'e kadar olan sürümler iki indeks işleyici içeriyordu ve işleyici, zorunlu AS maddesinde belirtiliyordu. Kompakt indeksleme Hive 0.7.0'da, bitmap indeksleme ise Hive 0.8.0'da geldi.
- Kısa dizin: Değeri, her bir değerin konumunu ayrı ayrı kaydetmek yerine, o değeri içeren HDFS bloğunun adresiyle birlikte depolar. Bu, birçok farklı değere sahip sütunlar için uygundur.
- Bitmap dizini: Bu, her farklı değer için bir bitmap depolar; bu, durum veya cinsiyet bayrağı gibi yalnızca az sayıda farklı değere sahip bir sütun için yaygın bir yaklaşımdır.
Aşağıdaki şekilde kompakt bir dizin oluşturulur, listelenir ve silinir:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
WITH DEFERRED REBUILD seçeneği, dizini doldurmadan kaydeder, böylece derleme ALTER INDEX ile ayrı olarak planlanabilir. Bitmap dizini de aynı şekilde, farklı bir işleyici adıyla oluşturulur:
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;
İndeks otomatik olarak yenilenmez. Temel tabloya yeni veri eklendiğinde, ALTER INDEX … REBUILD komutu tekrar çalıştırılmalıdır ve bölümlenmiş bir tabloda yeniden oluşturma işlemi tek bir bölümle sınırlı olabilir.
Hive 3.0'da İndeksleme Neden Kaldırıldı?
Hive'ın 3.0 sürümünde HIVE-18448 güncellemesiyle indeksleme kaldırıldı, bu nedenle CREATE INDEX, SHOW INDEX ve DROP INDEX komutları mevcut kümede artık bulunmuyor. Sütun tabanlı depolama ve maliyet tabanlı optimizasyon olgunlaştıktan sonra, bu özellik yeniden oluşturma maliyetine nadiren değiyordu. Üç alternatif aynı işlevi görüyor.
- Somutlaştırılmış görünümler: Hive 3.0.0'da tanıtılan bir gerçekleştirilmiş görünüm Sorgunun önceden hesaplanmış sonucunu saklar ve optimizasyon aracı gelen sorguları otomatik olarak bu sonuca göre yeniden yazar.
- Sütun tabanlı dosya biçimleri: ORC ve Parquet, kendi hafif indekslerine ve minimum/maksimum istatistiklerine sahiptir; bu sayede okuyucu, kullanıcı tanımlı herhangi bir indeks olmadan tüm şeritleri, blokları veya dosyaları atlayabilir.
- Bölümler ve kovalar: bölümleme ve kovalama Dizin ve dosya düzeyinde veri temizleme işlemi, genellikle bir indeksleme işleminden çok daha fazla girdiyi ortadan kaldırır.
Hive 2.x'te indeks hala geçerlidir, ancak yeni çalışmalar için yukarıdaki seçeneklerden biri daha uygundur.
