Hive Sorgu Örnekleri: Sırala, Gruplandır ve Cluster By
⚡ Akıllı Özet
Hive sorguları, satırları sıralamak, gruplandırmak ve indirgeyiciler arasında dağıtmak için ORDER BY, GROUP BY, SORT BY, CLUSTER BY ve DISTRIBUTE BY yan tümcelerini kullanır ve her bir yan tümce burada tek bir örnek çalışanlar tablosunda gösterilmiştir.

Hive, ETL amaçları için SQL benzeri bir sorgulama dili sunar. Hadoop'un dosya sistemi.
Hive Sorgu Dili (HiveQL), Hive'da tablolar, veritabanları ve sorgularla çalışmak için SQL benzeri bir ortam sağlar.
Hive ile ilişkili farklı türdeki maddeler, farklı veri işleme ve sorgulama türlerini gerçekleştirmek için kullanılır ve Hive, ortam dışındaki düğümlerle daha iyi bağlantılar kurmak için JDBC bağlantısı sağlar.
Hive sorguları aşağıdaki özellikleri sağlar:
- Veri modelleme, örneğin veritabanları, tablolar vb. oluşturma.
- ETL işlevleri, örneğintracVerilerin tablolara aktarılması, dönüştürülmesi ve yüklenmesi
- Katıldı farklı veri tablolarını birleştirmek için
- Kod kolaylığı için kullanıcıya özel özel komut dosyaları
- Hadoop'a ek olarak daha hızlı sorgulama aracı
Hive'da Tablo Oluşturma
Bu eğitimin ana konusuna başlamadan önce, ilerleyen bölümlerde referans olarak kullanacağımız bir tablo oluşturacağız.
Bu eğitimde, aşağıdaki ekran görüntüsünde gösterildiği gibi 6 sütunlu "employees_guru" tablosunu oluşturacağız.
Yukarıdaki ekran görüntüsünden,
- “Guru” adlı kuruluşta bulunan çalışanlara ait Id, Name, Age, Address, Salary, Department gibi 6 sütun değerine sahip “employees_guru” tablosunu oluşturuyoruz.
- Bu adımda, employees_guru tablosuna veri yüklüyoruz. Yükleyeceğimiz veriler Employees.txt dosyasında yer almaktadır.
Sorguya göre sırala
HiveQL'deki ORDER BY sözdizimi, SQL'deki ORDER BY sözdizimine benzer. SQL dil.
ORDER BY, "SELECT" ifadesiyle birlikte kullandığımız yan tümcedir. Kovan sorguları Verileri sıralamak için kullanılır. Hive tablolarındaki sütunları kullanarak, ORDER BY ile belirtilen sütun değerlerini sıralar ve sorgu sonuçları bu değerlerin artan veya azalan sırasına göre görüntüler.
Bahsedilen ORDER BY alanı bir metin dizesi ise, sonuç sözlükbilimsel sırayla görüntülenir. Arka uçta, tüm sonuç kümesi tek bir indirgeyiciye iletilmelidir.
Bu tek redüktör ayrıca büyük bir masada ORDER BY işlemini pahalı hale getiriyor, bu nedenle katı modda (hive.mapred.mode=strictHive, LIMIT maddesi içermeyen bir ORDER BY isteğini reddeder.
Aşağıdaki ekran görüntüsü, ORDER BY sorgusunu ve sıralanmış satırlarını göstermektedir.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Bu sorgu, "employees_guru" tablosunda ORDER BY koşulu ve tanımlanmış ORDER BY sütun adı olarak "Department" kullanılarak gerçekleştirilir. "Department" bir metin olduğundan, sonuçlar alfabetik sıraya göre görüntülenir.
- Bu, sorgunun gerçek çıktısıdır. Sonuçlar, ADMIN, Finance vb. gibi Departman sütununa göre sırayla görüntülenir.
Sorgu:
SELECT * FROM employees_guru ORDER BY Department;
Sorguya göre gruplandır
GROUP BY yan tümcesi, gruplandırma için Hive tablolarındaki sütunları kullanır.ping GROUP BY ile belirtilen belirli sütun değerleri kullanılır ve sorgu, bu değerlere göre gruplandırılmış sonuçları seçer ve görüntüler.
Örneğin, aşağıdaki ekran görüntüsü her departmanda bulunan toplam çalışan sayısını göstermektedir. Burada "Departman" değeri GROUP BY olarak belirlenmiştir.
Yukarıdaki ekran görüntüsünden şunları gözlemleyeceğiz:
- Bu, "employees_guru" tablosunda GROUP BY yan tümcesi ve tanımlanmış GROUP BY sütun adı olarak "Department" kullanılarak gerçekleştirilen sorgudur.
- Burada gösterilen çıktı, departman adı ve farklı departmanlardaki çalışan sayısıdır. Belirli bir departmana ait tüm çalışanlar gruplandırılarak görüntülenir, bu nedenle her sonuç satırı, toplam çalışan sayısıyla birlikte bir departman adıdır.
Sorgu:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Göre sırala
SORT BY ifadesi, Hive tablolarının sütun adları üzerinde sıralama işlemi gerçekleştirir. Azalan sırada sıralama için DESC, artan sırada sıralama için ise ASC ifadesini kullanabiliriz.
SORT BY, satırları indirgeyiciye beslemeden önce sıralar, böylece sıralama tüm sonuç genelinde değil, her indirgeyici içinde garanti edilir. Sıralama her zaman sütun türüne bağlıdır.
Örneğin, sütun türü sayısal ise sayısal sıraya göre, sütun türü metin ise sözlük sırasına göre sıralanır.
Aşağıdaki ekran görüntüsü, DESC (azalan) sıralama yöntemi kullanılarak yapılan SORT BY sorgusunu göstermektedir.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Bu, "employees_guru" tablosunda SORT BY koşulu ve "Id" tanımlanmış SORT BY sütun adı ile gerçekleştirilen sorgudur. DESC anahtar kelimesini kullandık.
- Dolayısıyla görüntülenen çıktı "Id" değerine göre azalan sıradadır.
Sorgu:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY, HiveQL'de hem DISTRIBUTE BY hem de SORT BY yan tümcelerine alternatif olarak kullanılır.
CLUSTER BY yan tümcesi, Hive'da bulunan tablolarda kullanılır. Hive, CLUSTER BY'daki sütunları kullanarak satırları indirgeyiciler arasında dağıtır ve CLUSTER BY sütunları birden fazla indirgeyiciye gider. Ayrıca, bu birden fazla indirgeyicide bulunan değerlerin sıralama düzenini de sağlar.
Örneğin, CLUSTER BY ifadesi employees_guru tablosunun Id sütun adında belirtilmiştir. Bu sorguyu çalıştırmak, arka uçtaki birden fazla reducer'a sonuç verir, ancak ön uçta hem SORT BY hem de DISTRIBUTE BY için alternatif bir ifadedir.
MapReduce çerçevesinde SORT BY, GROUP BY veya CLUSTER BY ile sorgu yaptığımızda arka uç işlemi budur. Dolayısıyla, sonuçları birden fazla reducer'a kaydetmek istiyorsak, CLUSTER BY'ı kullanırız.
CLUSTER BY sözdizimi yalnızca sütun adlarını kabul eder, bu nedenle ASC ve DESC ona eklenemez; azalan bir sonuç için ayrı bir SORT BY … DESC ile DISTRIBUTE BY kullanılması gerekir.
Aşağıdaki ekran görüntüsü, Id üzerinde CLUSTER BY sorgusunu göstermektedir.
Yukarıdaki ekran görüntüsünden şu gözlemleri elde ediyoruz:
- Bu sorgu, Id alanındaki değere CLUSTER BY koşulunu uygular. Burada Id değerlerine göre sıralama yapılacaktır.
- Bu, employees_guru tablosunda bulunan Id ve Name değerlerini sıralı bir şekilde görüntüler.
Sorgu:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Şuna göre dağıt:
DISTRIBUTE BY yan tümcesi, Hive'da bulunan tablolarda kullanılır. Hive, DISTRIBUTE BY'deki sütunları kullanarak satırları indirgeyiciler arasında dağıtır; böylece aynı DISTRIBUTE BY sütun değerine sahip tüm satırlar aynı indirgeyiciye gider.
- Bu, N adet indirgeyicinin her birinin örtüşmeyen bir sinyal almasını sağlar.ping sütun değerleri kümesi
- Her bir indirgeyicinin çıktısını sıralamaz ve eşleşen satırların yan yana gelmesi garanti edilmez.
Aşağıdaki ekran görüntüsü, Id üzerinde DISTRIBUTE BY sorgusunu göstermektedir.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- DISTRIBUTE BY ifadesi, “employees_guru” tablosunun kimliği üzerinde gerçekleştirilir.
- Çıktıda Kimlik (Id) ve İsim (Name) gösterilir. Arka uçta, aynı kimliğe sahip satırlar aynı indirgeyiciye (reducer) gider.
Sorgu:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Bu dört madde birbirine karıştırılmaya müsait olduğundan, aşağıdaki tabloda karşılaştırılmıştır.
| fıkra | Redüktörler | Neyi garanti ediyor? |
|---|---|---|
| TARAFINDAN SİPARİŞ | Bir | Tüm sonuçlar genelindeki toplam sipariş miktarı |
| SIRALAMA | çok | Her bir redüktör içinden sipariş verme seçeneği yalnızca mevcuttur. |
| DAĞITIM İŞLEMİ | çok | Aynı anahtar aynı indirgeyiciye ulaşır, sıralanmamıştır. |
| KÜMELEME | çok | DAĞITIM ÖLÇÜTÜ ve SIRALAMA ÖLÇÜTÜ, artan sırada |






