Hive Join & Örneklerle Alt Sorgu Eğitimi

İçindekiler:

Anonim

Bu eğitimde öğreneceksiniz-

  • Sorgulara katılın
  • Farklı tipte birleştirme
  • Alt sorgular
  • Özel komut dosyalarını katıştırma
  • UDF'ler (Kullanıcı Tanımlı İşlevler)

Sorgulara katılın:

Birleştirme sorguları, Hive'da bulunan iki tabloda gerçekleştirilebilir. Join Concepts'i net olarak anlamak için burada iki tablo oluşturuyoruz,

  • Sample_joins (Müşteri Ayrıntılarıyla İlgili)
  • Sample_joins1 (Çalışanlar tarafından yapılan sipariş ayrıntılarıyla ilgili)

Adım 1) Çalışanların kimliği, adı, yaşı, adresi ve maaşıyla birlikte Sütun adlarının yer aldığı "sample_joins" tablosunun oluşturulması

Adım 2) Verilerin Yüklenmesi ve Görüntülenmesi

Yukarıdaki ekran görüntüsünden

  1. Müşteriler.txt'den sample_joins'e veri yükleme
  2. Sample_joins tablo içeriğini görüntüleme

Adım 3) 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

  1. Orderid, Date1, Id, Amount sütunlarıyla sample_joins1 tablosunun oluşturulması
  2. Orders.txt dosyasından sample_joins1 içine veri yükleniyor
  3. Sample_joins1'de bulunan kayıtları görüntüleme

İlerlerken, oluşturduğumuz tablolarda gerçekleştirilebilecek farklı türde birleştirmeler göreceğiz, ancak bundan önce birleştirmeler için aşağıdaki noktaları göz önünde bulundurmanız gerekir.

Joins'te dikkat edilmesi gereken bazı noktalar:

  • Birleştirmelerde yalnızca Eşitlik katılımlarına izin verilir
  • Aynı sorguda ikiden fazla tablo birleştirilebilir
  • Eşleşme olmayan ON Maddesi üzerinde daha fazla kontrol sağlamak için SOL, SAĞ, TAM DIŞ birleşimler mevcuttur
  • Birleştirmeler Değişmeli değildir
  • Birleşimler, SOL veya SAĞ birleşimler olup olmadıklarına bakılmaksızın sol ilişkilidir

Farklı tipte birleştirme

Birleşimler 4 türdendir, bunlar

  • İç birleşim
  • Sol dış katılma
  • Sağ Dış Birleştirme
  • Tam Dış Birleştirme

İç birleşim:

Her iki tabloda ortak olan Kayıtlar bu Dahili Birleştirme tarafından alınacaktır.

Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz

  1. Burada, eşleşme koşulu (c.Id = o.Id) olan sample_joins ve sample_joins1 tabloları arasında JOIN anahtar sözcüğünü kullanarak birleştirme sorgusu gerçekleştiriyoruz.
  2. Sorguda belirtilen koşulu kontrol ederek her iki tabloda bulunan ortak kayıtları görüntüleyen çı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:

  • Yığın sorgu dili LEFT OUTER JOIN, sağ tabloda eşleşme olmasa bile soldaki tablodaki tüm satırları döndürür
  • ON Cümlesi sağ tablodaki sıfır kayıtla eşleşirse, birleşimler yine de sonuçta sağ tablodaki her sütunda NULL olan bir kayıt döndürür.

Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz

  1. Burada, (c.Id = o.Id) olarak eşleşen koşula sahip sample_joins ve sample_joins1 tabloları arasında "LEFT OUTER JOIN" anahtar sözcüğünü kullanarak birleştirme sorgusu gerçekleştiriyoruz.

    Örneğin, burada referans olarak çalışan kimliğini kullanıyoruz, id'nin hem sağda hem de solda ortak olup olmadığını kontrol ediyor. Eşleşme koşulu olarak hareket eder.

  2. Sorguda belirtilen koşulu kontrol ederek her iki tabloda bulunan ortak kayıtları görüntüleyen çıktı.

    Yukarıdaki çıktıdaki NULL değerler, sample_joins1 olan Sağ tablodan 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:

  • Yığın sorgu dili RIGHT OUTER JOIN, soldaki tabloda eşleşme olmasa bile Sağ tablodaki tüm satırları döndürür
  • ON İfadesi, sol tablodaki sıfır kayıtla eşleşirse, birleşimler yine de soldaki tablodan her sütunda NULL olan sonuçta bir kayıt döndürür.
  • SAĞ birleşimler her zaman bir Sağ tablodan kayıtları ve sol tablodan eşleşen kayıtları döndürür. Soldaki tablo sütuna karşılık gelen değere sahip değilse, o yerde NULL değerleri döndürecektir.

Yukarıdaki ekran görüntüsünden aşağıdakileri gözlemleyebiliriz

  1. Burada, eşleme koşulu (c.Id = o.Id) olan sample_joins ve sample_joins1 tabloları arasında "RIGHT OUTER JOIN" anahtar sözcüğünü kullanarak birleştirme sorgusu gerçekleştiriyoruz.
  2. Sorguda belirtilen koşulu kontrol ederek her iki tabloda bulunan ortak kayıtları görüntüleyen çı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 sample_joins ve 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 da eşleşen değerlerin eksik olduğu sütunlar için NULL Değerleri doldurur.

Yukarıdaki ekran görüntüsünden şunları gözlemleyebiliriz:

  1. Burada, eşleme koşulu (c.Id = o.Id) olan sample_joins ve sample_joins1 tabloları arasında "FULL OUTER JOIN" anahtar sözcüğünü kullanarak birleştirme sorgusu gerçekleştiriyoruz.
  2. Sorguda belirtilen koşulu kontrol ederek her iki tabloda bulunan 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 bulunan bir Sorgu, alt sorgu olarak bilinir. Ana sorgu, alt sorgular tarafından döndürülen değerlere bağlı olacaktır.

Alt sorgular iki türe ayrılabilir

  • FROM yan tümcesinde alt sorgular
  • WHERE yan tümcesinde alt sorgular

Ne zaman kullanılmalı:

  • Farklı tablolardan iki sütun değerinden birleştirilmiş belirli bir değeri elde etmek için
  • Bir tablo değerinin diğer tablolara bağımlılığı
  • Diğer tablolardan bir sütun değerinin karşılaştırmalı kontrolü

Sözdizimi:

Subquery in FROM clauseSELECT From (SubQuery) Subquery in WHERE clauseSELECT  FromWHERE col1 IN (SubQuery);

Misal:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

Burada t1 ve t2 tablo isimleridir. Renkli olan, tablo t1 üzerinde gerçekleştirilen Alt Sorgudur. Burada a ve b, bir alt sorguya eklenen ve col1'e atanan sütunlardır. Sütun1, Ana tabloda bulunan sütun değeridir. Alt sorguda bulunan bu sütun "sütun1" sütun1 sütunundaki ana tablo sorgusuna eşdeğerdir.

Özel komut dosyalarını gömme:

Hive, müşteri gereksinimleri için kullanıcıya özel komut dosyaları yazmanın uygulanabilirliğini sağlar. Kullanıcılar kendi haritalarını yazabilir ve gereksinimler için komut dosyalarını azaltabilir. Bunlara Gömülü Özel komut dosyaları denir. Kodlama mantığı özel betiklerde tanımlanır ve bu betiği ETL zamanında kullanabiliriz.

Gömülü Komut Dosyaları ne zaman seçilir:

  • İstemciye özel gereksinimlerde, geliştiricilerin Hive'da komut dosyaları yazması ve dağıtması gerekir
  • Hive dahili işlevlerinin belirli alan gereksinimleri için çalışmayacağı durumlarda

Bunun için Hive'da hem eşleme hem de indirgeme betiklerini gömmek için TRANSFORM deyimini kullanır.

Bu Gömülü özel komut dosyalarında 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ılacaktır.
  • Kullanıcı komut dosyasının standart çıktısı, TAB ile ayrılmış dize sütunları olarak değerlendirilecektir.

Örnek Gömülü Komut Dosyası,

FROM (FROM pv_usersMAP pv_users.userid, pv_users.dateUSING 'map_script'AS dt, uidCLUSTER BY dt) map_outputINSERT OVERWRITE TABLE pv_users_reducedREDUCE map_output.dt, map_output.uidUSING 'reduce_script'AS date, count;

Yukarıdaki komut dosyasından şunları gözlemleyebiliriz:

Bu sadece anlamak için örnek bir komut dosyasıdır

  • pv_users, map_script'te belirtildiği gibi userid ve date gibi alanları olan kullanıcılar tablosudur.
  • İndirgeyici komut dosyası, pv_users tablolarının tarih ve sayısında tanımlanmıştır