Örneklerle Hive Katılımı ve Alt Sorgu Eğitimi
Sorgulara katıl
Birleştirme sorguları Hive'da bulunan iki tabloda gerçekleştirilebilir. Anlamak için Katıl Concepts burada açıkça iki tablo oluşturuyoruz,
- Sample_joins( Müşteri Ayrıntılarıyla İlgili )
- Sample_joins1(Çalışanlar tarafından yapılan sipariş detaylarıyla ilgili)
) 1 Adım Çalışanların Kimlik, Ad, Yaş, adres ve maaş sütun adlarını içeren "sample_joins" tablosunun oluşturulması
) 2 Adım Veri Yükleme ve Görüntüleme
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 sample_joins1 tablosunun oluşturulması ve verilerin yüklenmesi, görüntülenmesi
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Orderid, Date1, Id, Amount sütunlarıyla 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
İlerledikçe oluşturduğumuz tablolar üzerinde gerçekleştirilebilecek farklı birleştirme türlerini göreceğiz ancak ondan önce birleştirmeler için aşağıdaki noktaları göz önünde bulundurmanız 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
- Eşleşmenin olmadığı ON Cümlesi üzerinde daha fazla kontrol sağlamak için LEFT, RIGHT, FULL OUTER birleşimleri mevcuttur
- Birleşimler değişmeli değildir
- Birleşimler, LEFT veya RIGHT birleşimleri olup olmadığına bakılmaksızın sol ilişkiseldir
Farklı türde birleştirmeler
Birleşmeler 4 çeşittir, bunlar
- İç birleşim
- Sol dış katılma
- Sağ Dış Birleştirme
- Tam Dış Birleştirme
İç birleşim:
Her iki tablo için ortak olan kayıtlar bu İç Birleştirme tarafından alınacaktır.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Burada sample_joins ve sample_joins1 tabloları arasında JOIN anahtar kelimesini kullanarak (c.Id= o.Id) eşleştirme koşuluyla birleştirme sorgusu gerçekleştiriyoruz.
- Sorguda belirtilen koşulun kontrol edilmesiyle her iki tabloda da bulunan ortak kayıtları gösteren çıktı
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:
- Hive sorgu dili LEFT OUTER JOIN, sağ tabloda eşleşme olmamasına rağmen sol tablodaki tüm satırları döndürür
- ON Clause sağ tablodaki sıfır kayıtla eşleşiyorsa, birleştirmeler sonuçta sağ tablodaki her sütunda NULL bulunan bir kayıt döndürür.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Burada sample_joins ve sample_joins1 tabloları arasında “LEFT OUTER JOIN” anahtar kelimesini kullanarak (c.Id= o.Id) eşleştirme koşuluyla join sorgusu gerçekleştiriyoruz.Örneğin burada çalışan kimliğini referans olarak kullanıyoruz, kimliğin tablonun sağında ve solunda ortak olup olmadığını kontrol ediyor. Eşleştirme koşulu görevi görür.
- Sorguda belirtilen koşulu kontrol ederek her iki tabloda da bulunan ortak kayıtları görüntüleyen çıktı. Yukarıdaki çıktıdaki NULL değerleri, sample_joins1 olan Sağ tablodan 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şim:
- Hive sorgu dili RIGHT OUTER JOIN, sol tabloda eşleşme olmamasına rağmen Sağ tablodaki tüm satırları döndürür
- ON Cümlesi sol tablodaki sıfır kayıtla eşleşiyorsa, birleştirmeler sonuçta sol tablodaki her sütunda NULL bulunan bir kayıt döndürür.
- RIGHT birleştirmeleri her zaman Sağ tablodaki kayıtları ve soldaki tablodaki eşleşen kayıtları döndürür. Soldaki tabloda sütuna karşılık gelen hiçbir değer yoksa, o yerde NULL değerler döndürülür.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Burada sample_joins ve sample_joins1 tabloları arasında “RIGHT OUTER JOIN” anahtar kelimesini kullanarak (c.Id= o.Id) eşleştirme koşuluyla join sorgusu gerçekleştiriyoruz.
- Sorguda belirtilen koşulun kontrol edilmesiyle her iki tabloda da bulunan ortak kayıtları gösteren çıktı
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:
Sorguda verilen JOIN Koşuluna göre hem sample_joins hem de sample_joins1 tablolarının kayıtlarını birleştirir.
Her iki tablodaki tüm kayıtları döndürür ve her iki tarafta eşleşen değerlerin eksik olduğu sütunlar için NULL Değerleri doldurur.
Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz:
- Burada sample_joins ve sample_joins1 tabloları arasında “FULL OUTER JOIN” anahtar kelimesini kullanarak (c.Id= o.Id) eşleştirme koşuluyla join sorgusu gerçekleştiriyoruz.
- Sorguda belirtilen koşulun kontrol edilmesiyle her iki tabloda da mevcut olan tüm kayıtları görüntüleyen çıktı. Buradaki çıktıdaki boş değerler, her iki tablonun sütunlarındaki 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
Bir Sorgu içinde mevcut olan bir Sorgu, alt sorgu olarak bilinir. Ana sorgu, alt sorguların 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 tablo değerinin diğer tablolara bağımlılığı
- Bir sütun değerinin diğer tablolardan karşılaştırmalı kontrolü
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. Renkli olan t1 tablosunda gerçekleştirilen Alt Sorgudur. Burada a ve b, bir alt sorguya eklenen ve sütun1'e atanan sütunlardır. Col1, Ana tabloda bulunan sütun değeridir. Alt sorguda bulunan bu “col1” sütunu, col1 sütunundaki ana tablo sorgusuna eşdeğerdir.
Özel komut dosyalarını yerleştirme
kovan İstemci gereksinimleri için kullanıcıya özel komut dosyaları yazmanın fizibilitesini sağlar. Kullanıcılar kendi haritalarını yazabilir ve gereksinimlere göre komut dosyalarını azaltabilirler. Bunlara Gömülü Özel komut dosyaları denir. Kodlama mantığı özel scriptlerde tanımlıdır ve o scripti ETL süresinde kullanabiliriz.
Gömülü Komut Dosyaları ne zaman seçilmelidir:
- Müşteriye özel gereksinimlerde geliştiricilerin Hive'da komut dosyaları yazıp dağıtması gerekir
- Hive'ın yerleşik işlevlerinin belirli alan adı gereksinimleri için çalışmadığı durumlar
Bunun için Hive'da hem harita hem de düşürücü komut dosyalarını gömmek için TRANSFORM yan tümcesini kullanır.
Bu gömülü özel betiklerde, aşağıdaki noktalara dikkat etmeliyiz
- Sütunlar dizeye dönüştürülecek ve kullanıcı komut dosyasına verilmeden önce TAB ile sınırlandırılacak
- Kullanıcı komut dosyasının standart çıktısı, TAB ile ayrılmış dize sütunları olarak ele alınacaktır
Ö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 betikten aşağıdakileri gözlemleyebiliriz
Bu yalnızca anlaşılması için örnek komut dosyasıdır
- pv_users, map_script'te belirtildiği gibi kullanıcı kimliği ve tarih gibi alanlara sahip olan kullanıcılar tablosudur
- Pv_users tablolarının tarihi ve sayısında tanımlanan azaltıcı komut dosyası