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
Krok 2) Ładowanie i wyświetlanie danych
Z powyższego zrzutu ekranu
- Ładowanie danych do sample_joins z pliku Customers.txt
- Wyświetlanie zawartości tabeli sample_joins
Krok 3) Utworzenie tabeli sample_joins1 i załadowanie, wyświetlenie danych
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy
- Utworzenie tabeli sample_joins1 z kolumnami Orderid, Date1, Id, Amount
- Ładowanie danych do sample_joins1 z pliku Orders.txt
- 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.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy
- 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).
- 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
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy
- 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.
- 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.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy
- 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).
- 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.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:
- 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).
- 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