Samouczek dotyczący łączenia i podkwerend Hive z przykładami

Dołącz do zapytań

Zapytania łączące można wykonywać na dwóch tabelach znajdujących się w gałęzi Hive. Aby zrozumieć Dołącz Concepts wyraźnie tutaj tworzymy dwie tabele,

  • Sample_joins(Powiązane ze szczegółami klientów)
  • Sample_joins1 (dotyczy szczegółów zamówień wykonanych przez pracowników)

Krok 1) Utworzenie tabeli „sample_joins” z nazwami kolumn ID, imieniem, wiekiem, adresem i wynagrodzeniem pracowników

Dołącz do zapytań

Krok 2) Ładowanie i wyświetlanie danych

Dołącz do zapytań

Z powyższego zrzutu ekranu

  1. Ładowanie danych do sample_joins z pliku Customers.txt
  2. Wyświetlanie zawartości tabeli sample_joins

Krok 3) Utworzenie tabeli sample_joins1 i załadowanie, wyświetlenie danych

Dołącz do zapytań

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy

  1. Utworzenie tabeli sample_joins1 z kolumnami Orderid, Date1, Id, Amount
  2. Ładowanie danych do sample_joins1 z pliku Orders.txt
  3. Wyświetlanie rekordów obecnych w sample_joins1

Następnie przyjrzymy się różnym typom połączeń, jakie można wykonać w tabelach, które utworzyliśmy, ale zanim to zrobimy, musimy wziąć pod uwagę następujące kwestie dotyczące połączeń.

Kilka punktów, na które należy zwrócić uwagę w przypadku złączeń:

  • W połączeniach dozwolone są wyłącznie połączenia na zasadzie równości
  • W tym samym zapytaniu można połączyć więcej niż dwie tabele
  • Złączenia LEFT, RIGHT, FULL OUTER istnieją w celu zapewnienia większej kontroli nad klauzulą ​​ON, dla której nie ma dopasowania
  • Sprzężenia nie są przemienne
  • Złączenia są lewostronnie skojarzone niezależnie od tego, czy są to połączenia LEWE czy PRAWE

Różne typy złączeń

Złączenia są 4 typów, są to

  • Wewnętrzne dołączenie
  • Lewe złącze zewnętrzne
  • Prawe połączenie zewnętrzne
  • Pełne połączenie zewnętrzne

Połączenie wewnętrzne:

Rekordy wspólne dla obu tabel zostaną pobrane przez to połączenie wewnętrzne.

Połączenie wewnętrzne

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy

  1. Tutaj wykonujemy zapytanie o złączenie przy użyciu słowa kluczowego JOIN pomiędzy tabelami sample_joins i sample_joins1 z warunkiem dopasowania jako (c.Id= o.Id).
  2. Dane wyjściowe wyświetlające wspólne rekordy obecne w obu tabelach po sprawdzeniu warunku wymienionego w zapytaniu

zapytanie:

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

Lewe połączenie zewnętrzne:

  • Język zapytań Hive Funkcja LEFT OUTER JOIN zwraca wszystkie wiersze z lewej tabeli, nawet jeśli w prawej tabeli nie ma żadnych dopasowań
  • Jeśli klauzula ON dopasowuje zero rekordów w prawej tabeli, złączenia nadal zwracają w wyniku rekord z wartością NULL w każdej kolumnie z prawej tabeli

Lewe połączenie zewnętrzne

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy

  1. Tutaj wykonujemy zapytanie o złączenie przy użyciu słowa kluczowego „LEFT OUTER JOIN” pomiędzy tabelami sample_joins i sample_joins1 z warunkiem dopasowania jako (c.Id= o.Id).Na przykład tutaj używamy identyfikatora pracownika jako odniesienia, sprawdza on, czy identyfikator jest wspólny po prawej i lewej stronie stołu, czy nie. Działa jako warunek dopasowania.
  2. Dane wyjściowe wyświetlające wspólne rekordy obecne w obu tabelach po sprawdzeniu warunku wymienionego w zapytaniu. Wartości NULL w powyższych wynikach to kolumny bez wartości z prawej tabeli, czyli przykładowe_złączenia1

zapytanie:

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Prawe złącze zewnętrzne:

  • Język zapytań Hive RIGHT OUTER JOIN zwraca wszystkie wiersze z prawej tabeli, nawet jeśli nie ma żadnych dopasowań w lewej tabeli
  • Jeśli klauzula ON pasuje do zerowych rekordów w lewej tabeli, łączenia nadal zwracają w wyniku rekord z wartością NULL w każdej kolumnie z lewej tabeli
  • Złączenia PRAWE zawsze zwracają rekordy z prawej tabeli i dopasowane rekordy z lewej tabeli. Jeśli lewa tabela nie ma wartości odpowiadających kolumnie, zwróci w tym miejscu wartości NULL.

Prawe połączenie zewnętrzne

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy

  1. Tutaj wykonujemy zapytanie o złączenie przy użyciu słowa kluczowego „RIGHT OUTER JOIN” pomiędzy tabelami sample_joins i sample_joins1 z warunkiem dopasowania jako (c.Id= o.Id).
  2. Dane wyjściowe wyświetlające wspólne rekordy obecne w obu tabelach po sprawdzeniu warunku wymienionego w zapytaniu

Pytanie:

  SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Pełne złączenie zewnętrzne:

Łączy rekordy obu tabel sample_joins i sample_joins1 w oparciu o warunek JOIN podany w zapytaniu.

Zwraca wszystkie rekordy z obu tabel i wypełnia wartości NULL dla brakujących wartości kolumn pasujących po obu stronach.

Pełne połączenie zewnętrzne

Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:

  1. Tutaj wykonujemy zapytanie o złączenie przy użyciu słowa kluczowego „FULL OUTER JOIN” pomiędzy tabelami sample_joins i sample_joins1 z warunkiem dopasowania jako (c.Id= o.Id).
  2. Dane wyjściowe wyświetlające wszystkie rekordy obecne w obu tabelach po sprawdzeniu warunku wymienionego w zapytaniu. Wartości null na wyjściu wskazują brakujące wartości z kolumn obu tabel.

Pytanie

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Zapytania podrzędne

Zapytanie zawarte w zapytaniu nazywane jest zapytaniem podrzędnym. Główne zapytanie będzie zależeć od wartości zwróconych przez podzapytania.

Podzapytania można podzielić na dwa typy

  • Podzapytania w klauzuli FROM
  • Podzapytania w klauzuli WHERE

Kiedy użyć:

  • Aby uzyskać określoną wartość, połączoną z wartości dwóch kolumn z różnych tabel
  • Zależność wartości jednej tabeli od innych tabel
  • Sprawdzanie porównawcze wartości jednej kolumny z innych tabel

Składnia:

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);

Przykład:

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

Tutaj t1 i t2 są nazwami tabel. Kolorowy to Podzapytanie wykonywane na tabeli t1. Tutaj aib to kolumny dodane w podzapytaniu i przypisane do col1. Col1 to wartość kolumny obecna w tabeli głównej. Ta kolumna „col1” obecna w podzapytaniu jest równoważna zapytaniu tabeli głównej w kolumnie col1.

Osadzanie niestandardowych skryptów

Ul zapewnia możliwość pisania skryptów dostosowanych do wymagań klienta. Użytkownicy mogą pisać własne mapy i redukować skrypty pod kątem wymagań. Są to tak zwane osadzone skrypty niestandardowe. Logika kodowania jest zdefiniowana w niestandardowych skryptach i możemy używać tego skryptu w czasie ETL.

Kiedy wybrać skrypty osadzone:

  • W przypadku wymagań specyficznych dla klienta programiści muszą pisać i wdrażać skrypty w Hive
  • Gdzie wbudowane funkcje Hive nie będą działać w przypadku określonych wymagań domeny

W tym celu w Hive używa klauzuli TRANSFORM do osadzania skryptów map i reduktorów.

W przypadku tych osadzonych skryptów niestandardowych musimy zwrócić uwagę na następujące kwestie

  • Kolumny zostaną przekształcone w ciągi znaków i rozdzielone tabulatorem przed przekazaniem ich skryptowi użytkownika
  • Standardowe wyjście skryptu użytkownika będzie traktowane jako kolumny ciągów rozdzielonych tabulatorami

Przykładowy osadzony skrypt,

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;

Z powyższego skryptu możemy zaobserwować następujące rzeczy

To jest tylko przykładowy skrypt do zrozumienia

  • pv_users to tabela użytkowników zawierająca pola takie jak identyfikator użytkownika i data, jak wspomniano w map_script
  • Skrypt redukujący zdefiniowany na podstawie daty i liczby tabel pv_users