Ö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ı

Sorgulara Katılın

) 2 Adım Veri Yükleme ve Görüntüleme

Sorgulara Katılın

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

  1. Customers.txt dosyasından sample_joins dosyasına veri yükleniyor
  2. 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

Sorgulara Katılın

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. Siparişler.txt dosyasından sample_joins1 dosyasına veri yükleniyor
  3. 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.

İç birleşim

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

  1. 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.
  2. 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.

Sol dış katılma

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

  1. 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.
  2. 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.

Sağ Dış Birleştirme

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

  1. 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.
  2. 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.

Tam Dış birleştirme

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

  1. 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.
  2. 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ı