Hive Join & SubQuery Vodič s primjerima
Pridružite upite
Upiti za spajanje mogu se izvoditi na dvije tablice prisutne u Hiveu. Za razumijevanje Pridružite se Concepts jasno, ovdje stvaramo dvije tablice,
- Sample_joins (povezano s pojedinostima o kupcima)
- Sample_joins1 (povezano s detaljima narudžbi koje su izvršili zaposlenici)
Korak 1) Stvaranje tablice “sample_joins” s imenima stupaca ID, imenom, dobi, adresom i plaćom zaposlenika
Korak 2) Učitavanje i prikazivanje podataka
Iz gornje snimke zaslona
- Učitavanje podataka u sample_joins iz Customers.txt
- Prikaz sadržaja tablice sample_joins
Korak 3) Stvaranje tablice sample_joins1 i učitavanje, prikazivanje podataka
Iz gornje snimke zaslona možemo vidjeti sljedeće
- Izrada tablice sample_joins1 sa stupcima Orderid, Date1, Id, Amount
- Učitavanje podataka u sample_joins1 iz orders.txt
- Prikaz zapisa prisutnih u sample_joins1
U nastavku ćemo vidjeti različite vrste spajanja koja se mogu izvesti na tablicama koje smo izradili, ali prije toga morate razmotriti sljedeće točke za spajanja.
Neke točke koje treba obratiti pozornost na spojeve:
- U spojevima su dopuštena samo spajanja jednakosti
- Više od dvije tablice mogu se spojiti u istom upitu
- LEFT, RIGHT, FULL OUTER spojevi postoje kako bi se osigurala veća kontrola nad klauzulom ON za koju nema podudaranja
- Spojevi nisu komutativni
- Spojevi su lijevo-asocijativni bez obzira jesu li LIJEVI ili DESNI spojevi
Različite vrste spajanja
Spojevi postoje 4 vrste, a to su
- Unutarnji spoj
- Lijevi vanjski spoj
- Desni vanjski spoj
- Potpuno vanjsko pridruživanje
Unutarnje spajanje:
Zapisi koji su zajednički objema tablicama bit će dohvaćeni ovim unutarnjim spajanjem.
Iz gornje snimke zaslona možemo vidjeti sljedeće
- Ovdje izvodimo upit spajanja pomoću ključne riječi JOIN između tablica sample_joins i sample_joins1 s odgovarajućim uvjetom kao (c.Id= o.Id).
- Izlaz prikazuje zajedničke zapise prisutne u obje tablice provjerom uvjeta spomenutog u upitu
upita:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
Lijevi vanjski spoj:
- Hive upitni jezik LEFT OUTER JOIN vraća sve retke iz lijeve tablice iako u desnoj tablici nema podudaranja
- Ako klauzula ON odgovara nula zapisa u desnoj tablici, spojevi i dalje vraćaju zapis u rezultatu s NULL u svakom stupcu iz desne tablice
Iz gornje snimke zaslona možemo vidjeti sljedeće
- Ovdje izvodimo upit spajanja pomoću ključne riječi "LEFT OUTER JOIN" između tablica sample_joins i sample_joins1 s odgovarajućim uvjetom kao (c.Id= o.Id).Na primjer ovdje koristimo ID zaposlenika kao referencu, provjerava je li ID uobičajen u desnoj i lijevoj tablici ili ne. Djeluje kao odgovarajući uvjet.
- Izlaz koji prikazuje uobičajene zapise prisutne u obje tablice provjerom uvjeta spomenutog u upitu. NULL vrijednosti u gornjem izlazu su stupci bez vrijednosti iz Desne tablice koja je sample_joins1
upita:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Desni vanjski spoj:
- Upitni jezik košnice RIGHT OUTER JOIN vraća sve retke iz desne tablice iako u lijevoj tablici nema podudaranja
- Ako se klauzula ON podudara s nula zapisa u lijevoj tablici, spojevi i dalje vraćaju zapis u rezultatu s NULL u svakom stupcu iz lijeve tablice
- RIGHT spojevi uvijek vraćaju zapise iz desne tablice i podudarne zapise iz lijeve tablice. Ako lijeva tablica nema vrijednosti koje odgovaraju stupcu, vratit će NULL vrijednosti na tom mjestu.
Iz gornje snimke zaslona možemo vidjeti sljedeće
- Ovdje izvodimo upit spajanja pomoću ključne riječi "RIGHT OUTER JOIN" između tablica sample_joins i sample_joins1 s odgovarajućim uvjetom kao (c.Id= o.Id).
- Izlaz prikazuje zajedničke zapise prisutne u obje tablice provjerom uvjeta spomenutog u upitu
Pitanje:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Potpuno vanjsko spajanje:
Kombinira zapise obje tablice sample_joins i sample_joins1 na temelju JOIN uvjeta danog u upitu.
Vraća sve zapise iz obje tablice i ispunjava NULL vrijednosti za stupce kojima nedostaju vrijednosti koje se podudaraju s obje strane.
Iz gornje snimke zaslona možemo vidjeti sljedeće:
- Ovdje izvodimo upit spajanja pomoću ključne riječi "FULL OUTER JOIN" između tablica sample_joins i sample_joins1 s odgovarajućim uvjetom kao (c.Id= o.Id).
- Izlaz koji prikazuje sve zapise prisutne u obje tablice provjerom uvjeta spomenutog u upitu. Null vrijednosti u izlazu ovdje označavaju vrijednosti koje nedostaju iz stupaca obje tablice.
Pitanje
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Podupiti
Upit prisutan unutar upita poznat je kao podupit. Glavni upit ovisit će o vrijednostima koje vraćaju podupiti.
Podupiti se mogu klasificirati u dvije vrste
- Podupiti u klauzuli FROM
- Podupiti u klauzuli WHERE
Kada koristiti:
- Da biste dobili određenu vrijednost kombiniranu iz dvije vrijednosti stupca iz različitih tablica
- Ovisnost vrijednosti jedne tablice o drugim tablicama
- Usporedna provjera vrijednosti jednog stupca iz drugih tablica
Sintaksa:
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);
Primjer:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
Ovdje su t1 i t2 nazivi tablica. Obojeni je Podupit izveden na tablici t1. Ovdje su a i b stupci koji su dodani u podupitu i dodijeljeni stupcu1. Col1 je vrijednost stupca prisutna u glavnoj tablici. Ovaj stupac "col1" prisutan u podupitu ekvivalentan je upitu glavne tablice u stupcu col1.
Ugradnja prilagođenih skripti
Košnica pruža izvedivost pisanja korisničkih specifičnih skripti za zahtjeve klijenta. Korisnici mogu napisati vlastitu kartu i smanjiti skripte prema zahtjevima. One se nazivaju ugrađene prilagođene skripte. Logika kodiranja definirana je u prilagođenim skriptama i tu skriptu možemo koristiti u ETL vremenu.
Kada odabrati ugrađene skripte:
- Prema specifičnim zahtjevima klijenta, programeri moraju pisati i implementirati skripte u Hive
- Tamo gdje ugrađene funkcije Hivea neće raditi za specifične zahtjeve domene
Za to u Hive-u koristi se klauzula TRANSFORM za ugradnju skripti mapiranja i reduktora.
U ovim ugrađenim prilagođenim skriptama, moramo se pridržavati sljedećih točaka
- Stupci će se transformirati u niz i razgraničiti TAB-om prije nego što se predaju korisničkoj skripti
- Standardni izlaz korisničke skripte tretirat će se kao stupci niza odvojeni TAB-om
Uzorak ugrađene skripte,
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;
Iz gornje skripte možemo uočiti sljedeće
Ovo je samo primjer skripte za razumijevanje
- pv_users je tablica korisnika koja ima polja kao što su userid i datum kao što je spomenuto u map_scriptu
- Reduktorska skripta definirana na datumu i broju pv_users tablica