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üş mantıklıdır: Bir görünüm, metastore'da yalnızca SELECT sorgusunu saklar, bu nedenle kendi başına disk alanı kaplamaz.
  • 🔒 Tasarım gereği salt okunur: Bir görünüm, LOAD, INSERT veya ALTER işlemlerinin hedefi olamaz, çünkü Hive her sorguda onu yeniden değerlendirir.
  • 📍 Verilere ilişkin indeks noktaları: İndeks, Hive'ın dosyanın tamamını değil, bir bölümünü okumasını sağlayan, sütun değerine işaret eden bir göstericidir.
  • 🗂️ İki görevli: Kompakt indeksleme yüksek kardinaliteli sütunlar için, bitmap indeksleme ise az sayıda farklı değere sahip sütunlar için uygundur.
  • 🔄 Manuel yeniden yapılandırma: İndeks hiçbir zaman otomatik olarak yenilenmez, bu nedenle temel tabloda değişiklik yapıldıktan sonra ALTER INDEX REBUILD komutu çalıştırılmalıdır.
  • ???? Hive 3.0'da kaldırıldı: HIVE-18448 kapsamında indeksleme kaldırıldı ve yerine somutlaştırılmış görünümler, ORC veya Parquet depolama ve bölümleme getirildi.

Hive'da görünümler ve indeksler örneklerle açıklanmıştır.

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.

SSS

DROP VIEW view_name komutu görünümü siler ve ALTER VIEW view_name RENAME TO new_name komutu görünümü yeniden adlandırır. Bir görünüm veri içermediği için, silme işlemi daha kolaydır.ping Temel tabloya asla dokunulmaz; yalnızca metastore girdisi kaybolur.

Somutlaştırılmış görünüm, önceden hesaplanmış sorgu sonucunu gerçek veri olarak depolar, bu nedenle disk alanı tüketir ve yeniden oluşturulması gerekir. Normal görünüm ise yalnızca sorgu metnini depolar ve her erişimde yeniden hesaplanır.

Hayır. Metastore yalnızca SELECT ifadesini ve çözümlenmiş sütun listesini saklar, daha fazlasını değil. Her referans, temel sorguyu yeniden çalıştırır; bu nedenle yavaş bir birleştirme işlemi üzerindeki bir görünüm yavaş kalır.

Hive 0.12.0 ve önceki sürümlerinde, CREATE INDEX ve DROP INDEX komutlarında dizin adları büyük/küçük harf duyarlıyken, ALTER INDEX komutunda küçük harf kullanılması gerekiyordu. Hive 0.13.0 sürümünde ise dizin adları her komut için büyük/küçük harf duyarlılığından bağımsız hale getirildi.

Evet, herhangi bir modern kümede. Bölüm budama, tarama başlamadan önce tüm dizinleri kaldırır ve gruplama, bir birleştirmeyi veya örneği belirli dosyalara daraltır; bu da genellikle bir indeks tablosunun sağlayabileceğinden daha iyidir.

Makine öğrenimi araçları sorgu günlüklerini profillendirir, koşul sütunlarını seçicilik ve sıklığa göre sıralar ve somutlaştırılmış bir görünümün veya bölümleme şemasının nerede fayda sağlayacağını önerir. Her öneriyi uygulamadan önce bir EXPLAIN planına göre doğrulayın.

Kısa bir yorumdan güvenilir bir şekilde CREATE VIEW ifadeleri üretir. Sürüme özgü herhangi bir şeyi kontrol edin, çünkü Hive 3.0 veya daha sonraki bir kümenin tamamen reddettiği CREATE INDEX sözdizimini hala üretiyor.

İndeks, ayrı bir işaretçi tablosudur ve Hive, temel tablo değiştiğinde onu asla yenilemez. Yeniden oluşturma yapılmadığı takdirde işaretçiler güncelliğini yitirir, bu nedenle iyileştirici ya indeksi atlar ya da güncel olmayan eşleşmeleri döndürür.

Bu yazıyı şu şekilde özetleyin: