Örneklerle Hive Katılımı ve Alt Sorgu Eğitimi
⚡ Akıllı Özet
Hive'da birleştirme işlemleri, iki veya daha fazla tablodan satırları eşleşen bir sütun üzerinden birleştirir ve alt sorgular bir sorguyu diğerinin içine yerleştirir; bu nedenle her ikisi de burada düz metin dosyalarından yüklenen iki örnek tabloda gösterilmiştir.

Sorgulara katıl
Birleştirme sorguları, mevcut iki tablo üzerinde gerçekleştirilebilir. kovanBirleştirme kavramlarını daha net anlamak için burada iki tablo oluşturuyoruz:
- örnek birleştirmeler (müşteri detaylarıyla ilgili)
- sample_joins1 (çalışanlar tarafından verilen sipariş detaylarıyla ilgili)
) 1 Adım Çalışanların Id, Name, Age, address ve salary sütun adlarını içeren “sample_joins” tablosunun oluşturulması. Aşağıdaki ekran görüntüsü, CREATE TABLE ifadesini ve onayını göstermektedir.
) 2 Adım Verilerin yüklenmesi ve görüntülenmesi. Sonraki ekran görüntüsü, yükleme komutunu ve ardından tablonun içeriğini göstermektedir.
Yukarıdaki ekran görüntüsünden:
- Customers.txt dosyasından sample_joins dosyasına veri yükleniyor
- sample_joins tablosu içerikleri görüntüleniyor
) 3 Adım Aşağıdaki ekran görüntüsünde gösterildiği gibi, sample_joins1 tablosunun oluşturulması, ardından verilerinin yüklenmesi ve görüntülenmesi.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Orderid, Date1, Id ve Amount sütunlarını içeren sample_joins1 tablosunun oluşturulması.
- Siparişler.txt dosyasından sample_joins1 dosyasına veri yükleniyor
- sample_joins1'de bulunan kayıtlar görüntüleniyor
İlerleyen bölümlerde, oluşturduğumuz tablolarda gerçekleştirilebilecek farklı birleştirme türlerini göreceğiz. Bundan önce, birleştirmelerle ilgili aşağıdaki noktalara dikkat etmeniz gerekiyor.
Birleştirmelerde dikkat edilmesi gereken bazı noktalar:
- Birleştirmelerde yalnızca eşitlik birleştirmelerine izin verilir.
- Aynı sorguda ikiden fazla tablo birleştirilebilir
- LEFT, RIGHT ve FULL OUTER birleştirmeleri, eşleşme bulunmayan ON maddesi üzerinde daha fazla kontrol sağlamak amacıyla mevcuttur.
- Birleştirmeler değişme özelliğine sahip değildir.
- Birleşimler, LEFT veya RIGHT birleşimleri olup olmadığına bakılmaksızın sol ilişkiseldir
Eşitlik kısıtlaması, Hive'ın uzun yıllar boyunca olduğu halini yansıtmaktadır. Hive 2.2.0'dan itibaren, ON maddesindeki karmaşık ifadeler desteklenmektedir (HIVE-15211), bu nedenle mevcut bir sürümde eşitlik dışı bir koşul kabul edilmektedir. Daha eski sürümlerde, koşulun bir eşitlik testi olması gerekir ve diğer her şey WHERE maddesine taşınmıştır.
Farklı türde birleştirmeler
Bağlantıların 4 çeşidi vardır. Bunlar şunlardır:
- İç birleşim
- Sol dış katılma
- Sağ dış birleşim
- Tam dış birleştirme
Her tür, aynı iki tablo üzerinde aşağıda gösterilmiştir; bu nedenle örnekler arasında değişen tek şey, eşleşmeyen satırların hangilerinin kaldığıdır.
İç birleşim
Bu iç birleştirme işlemiyle her iki tabloda da ortak olan kayıtlar alınacaktır. Aşağıdaki ekran görüntüsündeki sonuç, yalnızca siparişi eşleşen müşterileri içermektedir.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Burada, sample_joins ve sample_joins1 tabloları arasında JOIN anahtar kelimesini kullanarak, eşleşme koşulu (c.Id = o.Id) ile bir birleştirme sorgusu gerçekleştiriyoruz.
- Çıktı, sorguda belirtilen koşul kontrol edilerek seçilen ve her iki tabloda da ortak olan kayıtları görüntüler.
Sorgu:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
Sol dış katılma
- HiveQL LEFT OUTER JOIN, sağ tabloda eşleşme olmasa bile sol tablodaki tüm satırları döndürür.
- Eğer ON koşulu sağ tabloda sıfır kayıtla eşleşirse, birleştirme işlemi yine de sağ tablodaki her sütunda NULL değeri içeren bir kayıt döndürür.
Aşağıdaki ekran görüntüsünde, siparişi olmayanlar da dahil olmak üzere tüm müşterilerin göründüğü yer almaktadır.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Burada, sample_joins ve sample_joins1 tabloları arasında “LEFT OUTER JOIN” anahtar kelimesini kullanarak, eşleşme koşulu (c.Id = o.Id) ile bir birleştirme sorgusu gerçekleştiriyoruz. Örneğin, burada referans olarak çalışan kimliğini kullanıyoruz; bu, kimliğin hem sağ tabloda hem de sol tabloda ortak olup olmadığını kontrol eder. Bu, eşleşme koşulu görevi görür.
- Çıktı, sorguda belirtilen koşula göre seçilen kayıtları gösterir. Yukarıdaki çıktıda NULL değerleri, sağdaki tablodan (yani sample_joins1) hiçbir değer içermeyen sütunlardır.
Sorgu:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Sağ Dış Birleştirme
- HiveQL'de RIGHT OUTER JOIN, sol tabloda eşleşme olmasa bile sağ tablodaki tüm satırları döndürür.
- ON koşulu sol tabloda sıfır kayıtla eşleşirse, birleştirme işlemi yine de sonuçta sol tablodaki her sütunda NULL değeri bulunan bir kayıt döndürür.
- RIGHT JOIN işlemleri her zaman sağ tablodan kayıtları ve sol tablodan eşleşen kayıtları döndürür. Eğer sol tabloda ilgili sütuna karşılık gelen bir değer yoksa, o yerde NULL değerleri döndürülür.
Aşağıdaki ekran görüntüsü, önceki sonucun ayna görüntüsünü göstermektedir: eşleşen veya eşleşmeyen tüm siparişler görünmektedir.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Burada, sample_joins ve sample_joins1 tabloları arasında "RIGHT OUTER JOIN" anahtar kelimesini kullanarak ve eşleşme koşulu (c.Id = o.Id) ile bir birleştirme sorgusu gerçekleştiriyoruz.
- Çıktı, sorguda belirtilen koşulu kontrol ederek seçilen kayıtları görüntüler.
Sorgu:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Tam Dış Birleştirme
Bu işlem, sorguda verilen JOIN koşuluna bağlı olarak sample_joins ve sample_joins1 tablolarının kayıtlarını birleştirir.
Aşağıdaki ekran görüntüsünde de görüldüğü gibi, her iki tablodaki tüm kayıtları döndürür ve her iki tarafta da eşleşen değerleri eksik olan sütunlar için NULL değerleri doldurur.
Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:
- Burada, sample_joins ve sample_joins1 tabloları arasında "FULL OUTER JOIN" anahtar kelimesini kullanarak ve eşleşme koşulu (c.Id = o.Id) ile bir birleştirme sorgusu gerçekleştiriyoruz.
- Çıktı, sorguda belirtilen koşul kontrol edilerek seçilen, her iki tabloda da bulunan tüm kayıtları görüntüler. Çıktıdaki NULL değerleri, her iki tablonun sütunlarında eksik değerleri gösterir.
Sorgu:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Alt sorgular
Birleştirmeler tabloları yan yana getirir. Alt sorgu ise farklı bir şey yapar: bir sorguyu diğerinin içine yerleştirir, böylece dış sorgu önceden hesaplanmış bir sonuçtan yola çıkarak çalışabilir.
Bir sorgunun içinde yer alan sorguya alt sorgu denir. Ana sorgu, alt sorgunun döndürdüğü değerlere bağlı olacaktır.
Alt sorgular iki türe ayrılabilir:
- FROM yan tümcesindeki alt sorgular
- WHERE yan tümcesindeki alt sorgular
Ne zaman kullanmalı:
- Farklı tablolardaki iki sütun değerinden birleştirilmiş belirli bir değer elde etmek için
- Bir tablonun değerlerinin diğer tablolara bağımlılığı
- Bir sütunun değerlerinin diğer tablolardaki değerlerle karşılaştırmalı olarak kontrol edilmesi.
Sözdizimi:
Subquery in FROM clause SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main > Subquery in WHERE clause SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);
Örnek:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
Burada t1 ve t2 tablo adlarıdır. İçteki ifade, t1 tablosunda gerçekleştirilen alt sorgudur. Burada a ve b, alt sorguya eklenen ve col1'e atanan sütunlardır. Col1, ana tabloda bulunan sütun değeridir. Alt sorguda bulunan bu "col1" sütunu, ana tablodaki col1 sütunundaki sorguya eşdeğerdir.
Özel komut dosyalarını yerleştirme
Bir alt sorgu verileri yalnızca HiveQL kullanarak yeniden şekillendirirken, gömülü bir komut dosyası satırları Hive dışında yazılmış koda iletir.
Hive, istemci gereksinimleri için kullanıcıya özel komut dosyaları yazmayı mümkün kılar. Kullanıcılar, bu gereksinimler için kendi map ve reduce komut dosyalarını yazabilirler. Bunlara gömülü özel komut dosyaları denir. Kodlama mantığı özel komut dosyasında tanımlanır ve bu komut dosyasını ETL aşamasında kullanabiliriz.
Gömülü komut dosyalarını ne zaman seçmelisiniz:
- Müşteriye özgü gereksinimler nedeniyle geliştiricilerin Hive'da komut dosyaları yazıp dağıtması gerektiği durumlarda
- Hive'ın yerleşik işlevlerinin belirli alan gereksinimleri için işe yaramayacağı durumlarda
Bunun için Hive, hem map hem de reducer komut dosyalarını yerleştirmek üzere TRANSFORM yan tümcesini kullanır.
Bu gömülü özel komut dosyalarında aşağıdaki noktalara dikkat etmeliyiz:
- Sütunlar, kullanıcı komut dosyasına verilmeden önce dizeye dönüştürülecek ve TAB karakteriyle ayrılacaktır.
- Kullanıcı komut dosyasının standart çıktısı, sekme ile ayrılmış dize sütunları olarak işlenecektir.
Örnek gömülü komut dosyası:
FROM ( FROM pv_users MAP pv_users.userid, pv_users.date USING 'map_script' AS dt, uid CLUSTER BY dt) map_output INSERT OVERWRITE TABLE pv_users_reduced REDUCE map_output.dt, map_output.uid USING 'reduce_script' AS date, count;
Yukarıdaki koddan şunları gözlemleyebiliriz. Bu sadece anlaşılması için örnek bir koddur.
- pv_users, map_script'te belirtildiği gibi userid ve date gibi alanları içeren kullanıcılar tablosudur.
- Reducer komut dosyası, pv_users tablosunun tarihine ve sayısına göre tanımlanmıştır.







