Hive Sorguları: Sırala, Gruplandır, Dağıt, Cluster Örneklerle
Hive, ETL amacıyla SQL tipi sorgulama dili sağlar. Hadoop'un dosya sistemi.
Hive Sorgu dili (HiveQL), Hive'da tablolar, veritabanları ve sorgularla çalışmak için SQL türü ortamı sağlar.
Farklı türde veri manipülasyonları ve sorgulamalar gerçekleştirmek için Hive ile ilişkili farklı türde Cümlelerimiz olabilir. Ortam dışındaki farklı düğümlerle daha iyi bağlantı için. HIVE, JDBC bağlantısı da sağlar.
Hive sorguları aşağıdaki özellikleri sağlar:
- Veritabanlarının, tabloların vb. oluşturulması gibi veri modelleme.
- Çıkarma, Dönüştürme ve Verileri tablolara yükleme gibi ETL işlevleri
- 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 geçmeden önce, ilk olarak bir sonraki eğitimde referans olarak kullanacağımız bir tablo oluşturacağız.
Bu derste 6 sütunlu “employees_guru” tablosunu oluşturacağız.
Yukarıdaki ekran görüntüsünden,
- “Guru” organizasyonunda yer alan çalışanlara ait Id, Name, Age, Adres, Maaş, Departman gibi 6 sütun değerinden oluşan “employees_guru” tablosunu oluşturuyoruz.
- Bu adımda, çalışanlar_guru tablosuna veri yüklüyoruz. Yükleyeceğimiz veriler Employees.txt dosyası altına yerleştirilecektir.
Sorguya göre sırala
HiveQL'deki ORDER BY sözdizimi, HiveQL'deki ORDER BY sözdizimine benzer. SQL dil.
Order by, “SELECT” ifadesi ile kullandığımız cümledir. Kovan sorguları, verileri sıralamaya yardımcı olur. Sıralama ölçütü ile belirtilen belirli sütun değerlerini sıralamak için Hive tablolarındaki sütunları kullanın. Sütun adı ne olursa olsun, cümleye göre sırayı tanımladığımız sorgu, belirli sütun değerlerini artan veya azalan sıraya göre seçer ve sonuçları görüntüler.
Bahsedilen alana göre sıralama bir dize ise, sonucu sözlüksel sıraya göre gösterecektir. Arka uçta tek bir redüktöre aktarılması gerekiyor.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- “employees_guru” tablosunda ORDER BY cümleciği ile, ORDER BY sütun adı tanımlandığı şekilde Departman ile gerçekleştirilen sorgudur. Departman” String olduğundan, sözlüksel sıraya göre sonuçları görüntüleyecektir.
- Bu, sorgunun gerçek çıktısıdır. Doğru şekilde gözlemlersek, orderQuery'nin gerçekleştirilmesi için ADMIN, Finance vb. Departman sütunlarına göre sonuçların görüntülendiğini görebiliriz.
Sorgu :
SELECT * FROM employees_guru ORDER BY Department;
Sorguya göre gruplandır
Group by cümlesi, group by ile belirtilen belirli sütun değerlerini gruplandırmak için Hive tablolarındaki sütunları kullanır. Bir "groupby" cümlesi tanımladığımız sütun adı ne olursa olsun, sorgu belirli sütun değerlerini gruplayarak sonuçları seçer ve görüntüler.
Örneğin, aşağıdaki ekran görüntüsünde her departmanda bulunan toplam çalışan sayısı gösterilecektir. Burada değere göre Grup olarak “Departman” var.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyeceğiz
- “employees_guru” tablosu üzerinde GROUP BY deyimi ile Departman tanımlı GROUP BY sütun adı ile gerçekleştirilen sorgudur.
- Burada gösterilen çıktı, departman adıdır ve farklı departmanlardaki çalışan sayısıdır. Burada belirli departmana ait tüm çalışanlar gruplandırılır ve sonuçlarda gösterilir. Dolayısıyla sonuç, her departmanda bulunan toplam çalışan sayısıyla departman adıdır.
Sorgu:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Göre sırala
Sıralama ölçütü, çıktıyı sıralamak için Hive tablolarının sütun adlarında gerçekleştirilir. Azalan sıralama için DESC'den, artan sıralama için ASC'den bahsedebiliriz.
Bu sıralamada redüktöre besleme yapılmadan önce sıralar sıralanır. Her zaman sıralama sütun türlerine bağlıdır.
Örneğin, sütun türleri sayısal ise sayısal sıraya göre sıralanır, sütun türleri dize ise sözlükbilimsel sıraya göre sıralanır.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- SORT BY sütun adını tanımlayan "id" ile SORT BY cümleciği ile "employees_guru" tablosunda gerçekleştirilen sorgudur. DESC anahtar sözcüğünü kullandık.
- Yani görüntülenen çıktı azalan “id” sırasına göre olacaktır.
Sorgu:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster By, Hive-QL'de hem Distribute BY hem de Sort BY cümleciklerine alternatif olarak kullanılır.
Cluster Hive'da bulunan tablolarda kullanılan BY cümlesi. Hive içindeki sütunları kullanır Cluster Sıraları redüktörler arasında dağıtmak için. Cluster BY sütunları birden fazla redüktöre gidecektir.
- Birden fazla redüktörde bulunan değerlerin sıralanmasını sağlar
Örneğin, Cluster Tablonun Id sütun adı üzerinde belirtilen yan tümceye göre, çalışanlar_guru tablosu. Bu sorguyu yürütürken elde edilen çıktı, arka uçtaki birden fazla düşürücüye sonuç verecektir. Ancak ön uç olarak, hem Sıralama Ölçütü hem de Dağıtma Ölçütü için alternatif bir maddedir.
Bu aslında Map reduce çerçevesi açısından sort by, group by ve cluster by ile bir sorgu gerçekleştirdiğimizde gerçekleşen arka uç işlemidir. Yani sonuçları birden fazla reducer'a depolamak istiyorsak, şunu kullanırız: Cluster By.
Yukarıdaki ekran görüntüsünden şu gözlemleri elde ediyoruz:
- Id alanı değeri üzerinde CLUSTER BY deyimini gerçekleştiren sorgudur. Burada kimlik değerlerine göre bir sıralama yapılacak.
- guru_employees sıralamasında mevcut olan Kimlik ve İsimleri şuna göre sıralayarak görüntüler:
Sorgu:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Şuna göre dağıt:
Hive'da bulunan tablolarda kullanılan BY yan tümcesini dağıtın. Hive, satırları azaltıcılar arasında dağıtmak için Dağıtma ölçütü'ndeki sütunları kullanır. Tüm Distribute BY sütunları aynı azaltıcıya gidecektir.
- N adet redüktörün her birinin örtüşmeyen sütun aralıklarına sahip olmasını sağlar
- Her redüktörün çıkışını sıralamaz
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- "empoloyees_guru" tablosunun kimliği üzerinde performans gösteren Maddeye Göre DAĞITIM
- Id, Name'i gösteren çıktı. Arka uçta aynı reducer'a gidecektir.
Sorgu:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;