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

Pridružite se upitima

Korak 2) Učitavanje i prikazivanje podataka

Pridružite se upitima

Iz gornje snimke zaslona

  1. Učitavanje podataka u sample_joins iz Customers.txt
  2. Prikaz sadržaja tablice sample_joins

Korak 3) Stvaranje tablice sample_joins1 i učitavanje, prikazivanje podataka

Pridružite se upitima

Iz gornje snimke zaslona možemo vidjeti sljedeće

  1. Izrada tablice sample_joins1 sa stupcima Orderid, Date1, Id, Amount
  2. Učitavanje podataka u sample_joins1 iz orders.txt
  3. 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.

Unutarnje pridruživanje

Iz gornje snimke zaslona možemo vidjeti sljedeće

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

Lijevi vanjski spoj

Iz gornje snimke zaslona možemo vidjeti sljedeće

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

Desni vanjski spoj

Iz gornje snimke zaslona možemo vidjeti sljedeće

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

Potpuni vanjski spoj

Iz gornje snimke zaslona možemo vidjeti sljedeće:

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