U ovom vodiču naučit ćete-
- Pridružite se upitima
- Različita vrsta spajanja
- Podupiti
- Ugrađivanje prilagođenih skripti
- UDF-ovi (funkcije koje definira korisnik)
Pridružite se upitima:
Upiti za pridruživanje mogu se izvoditi na dvije tablice prisutne u Hiveu. Da bismo ovdje jasno razumjeli koncepte Pridruživanja, ovdje stvaramo dvije tablice,
- Sample_joins (povezani s pojedinostima kupaca)
- Sample_joins1 (vezano uz detalje narudžbi koje su izvršili zaposlenici)
Korak 1) Izrada tablice "sample_joins" s ID-jem imena stupaca, imenom, dobi, adresom i plaćom zaposlenika
Korak 2) Učitavanje i prikaz podataka
Iz gornjeg snimka zaslona
- Učitavanje podataka u sample_joins iz Customers.txt
- Prikazivanje sadržaja tablice sample_joins
Korak 3) Izrada tablice sample_joins1 i učitavanje, prikaz podataka
Iz gornjeg snimka zaslona možemo uočiti sljedeće
- Stvaranje tablice sample_joins1 sa stupcima Redoslijed, Datum1, Id, Količina
- Učitavanje podataka u sample_joins1 iz orders.txt
- Prikazivanje zapisa prisutnih u sample_joins1
Krećući se prema naprijed vidjet ćemo različite vrste pridruživanja koja se mogu izvoditi na tablicama koje smo stvorili, ali prije toga morate uzeti u obzir sljedeće točke za pridruživanja.
Neke točke na koje treba obratiti pažnju u Joins:
- U pridruživanjima su dopuštena samo pridruživanja ravnopravnosti
- U isti upit može se spojiti više od dvije tablice
- LIJEVO, DESNO, PUNO VANJSKO spajanje postoji kako bi se pružila veća kontrola nad ON klauzulom za koju ne postoji podudaranje
- Pridruživanja nisu komutativna
- Pridruživanja su asocijacija lijevo, bez obzira jesu li LIJEVA ili DESNA pridruživanja
Različita vrsta spajanja
Pridruživanja su 4 vrste, to su
- Unutarnji spoj
- Lijevo vanjsko Pridružite se
- Desno vanjsko pridruživanje
- Potpuno vanjsko pridruživanje
Unutarnje pridruživanje:
Zapisi zajednički za obje tablice dohvatit će se ovim Unutarnjim pridruživanjem.
Iz gornjeg snimka zaslona možemo uočiti sljedeće
- Ovdje izvodimo upit za pridruživanje pomoću ključne riječi JOIN između tablica sample_joins i sample_joins1 s podudarnim uvjetom kao (c.Id = o.Id).
- Izlaz koji prikazuje uobičajene zapise prisutne u obje tablice provjerom stanja spomenutog u upitu
Upit:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
Lijevo vanjsko pridruživanje:
- Jezik upita za košnice LIJEVO VANJSKO PRIDRUŽAVANJE vraća sve retke iz lijeve tablice iako u desnoj tablici nema podudaranja
- Ako se klauzula ON podudara s nula zapisa u desnoj tablici, pridruživanja i dalje vraćaju rezultat u rezultatu s NULL u svakom stupcu iz desne tablice
Iz gornjeg snimka zaslona možemo uočiti sljedeće
- Ovdje izvodimo upit za pridruživanje pomoću ključne riječi "LEFT OUTER JOIN" između tablica sample_joins i sample_joins1 s podudarnim uvjetom kao (c.Id = o.Id).
Na primjer, ovdje koristimo id zaposlenika kao referencu, on provjerava je li id uobičajen u desnoj, kao i u lijevoj tablici ili ne. Djeluje kao podudarni uvjet.
- Izlaz koji prikazuje uobičajene zapise prisutne u obje tablice provjerom stanja spomenutog u upitu.
NULL vrijednosti u gornjem izlazu su stupci bez vrijednosti iz desne tablice koja je sample_joins1
Upit:
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Desno vanjsko pridruživanje:
- Jezik upita za 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, pridruživanja i dalje vraćaju rezultat u rezultatu s NULL u svakom stupcu s lijeve tablice
- DESNA pridruživanja uvijek vraćaju zapise iz desne tablice i odgovarajuće zapise iz lijeve tablice. Ako lijeva tablica nema vrijednosti koje odgovaraju stupcu, vratit će NULL vrijednosti na tom mjestu.
Iz gornjeg snimka zaslona možemo uočiti sljedeće
- Ovdje izvodimo upit za pridruživanje pomoću ključne riječi "RIGHT OUTER JOIN" između tablica sample_joins i sample_joins1 s podudarnim uvjetom kao (c.Id = o.Id).
- Izlaz koji prikazuje uobičajene zapise prisutne u obje tablice provjerom stanja spomenutog u upitu
Upit :
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 i tablica sample_joins i sample_joins1 na temelju UJEDINJENOG uvjeta datog u upitu.
Vraća sve zapise iz obje tablice i popunjava NULL vrijednosti za stupce koji nedostaju vrijednosti koje se podudaraju s obje strane.
Iz gornjeg snimka zaslona možemo uočiti sljedeće:
- Ovdje izvodimo upit za pridruživanje pomoću ključne riječi "FULL OUTER JOIN" između tablica sample_joins i sample_joins1 s podudarnim uvjetom kao (c.Id = o.Id).
- Izlaz koji prikazuje sve zapise prisutne u obje tablice provjerom stanja spomenutog u upitu. Nulove vrijednosti u izlazu ovdje označavaju vrijednosti koje nedostaju iz stupaca obje tablice.
Upit
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Potupiti:
Upit prisutan unutar upita poznat je kao podupit. Glavni upit ovisit će o vrijednostima koje su vratili podupiti.
Podupiti se mogu klasificirati u dvije vrste
- Potupiti u klauzuli FROM
- Potupiti u klauzuli WHERE
Kada koristiti:
- Da biste dobili određenu vrijednost kombiniranu iz dviju vrijednosti stupaca iz različitih tablica
- Ovisnost vrijednosti jedne tablice o drugim tablicama
- Usporedna provjera vrijednosti jednog stupca iz drugih tablica
Sintaksa:
Subquery in FROM clauseSELECTFrom (SubQuery) Subquery in WHERE clauseSELECT From 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 se dodaju u podupit i dodjeljuju col1. Col1 je vrijednost stupca prisutna u glavnoj tablici. Ovaj stupac "col1" prisutan u podupitu jednak je upitu glavne tablice u stupcu col1.
Ugrađivanje prilagođenih skripti:
Hive pruža mogućnost pisanja korisničkih skripti za potrebe klijenta. Korisnici mogu napisati vlastitu kartu i smanjiti skripte za zahtjeve. Oni se nazivaju ugrađenim prilagođenim skriptama. Logika kodiranja definirana je u prilagođenim skriptama i tu skriptu možemo koristiti u ETL vremenu.
Kada odabrati ugrađene skripte:
- U specifičnim zahtjevima klijenta programeri moraju pisati i postavljati skripte u Hive
- Gdje ugrađene funkcije Hive-a neće raditi za određene zahtjeve domene
Za to u Hiveu koristi klauzulu TRANSFORM za ugrađivanje skripti mape i reduktora.
U ovom ugrađenom prilagođenom skriptu moramo uzeti u obzir sljedeće točke
- Stupci će se pretvoriti u niz i razgraničiti TAB-om prije davanja korisničkoj skripti
- Standardni izlaz korisničke skripte tretirat će se kao stupci niza odvojeni TAB-om
Uzorak ugrađene skripte,
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;
Iz gornje skripte možemo uočiti sljedeće
Ovo je samo primjer skripte za razumijevanje
- pv_users je korisnička tablica koja sadrži polja poput korisničkog imena i datuma kako je spomenuto u map_script
- Skripta reduktora definirana na datum i broj tablica pv_users