Avilys Prisijunkite & „SubQuery“ pamoka su pavyzdžiais

Turinys:

Anonim

Šioje pamokoje sužinosite

  • Prisijunkite prie užklausų
  • Skirtingo tipo sujungimai
  • Papildomos užklausos
  • Tinkintų scenarijų įdėjimas
  • UDF (vartotojo apibrėžimo funkcijos)

Prisijunkite prie užklausų:

Prisijungimo užklausas galima atlikti dviejose avilyje esančiose lentelėse. Norėdami aiškiai suprasti „Join Concepts“, mes kuriame dvi lenteles,

  • Sample_joins (susijęs su išsamia klientų informacija)
  • Sample_joins1 (susijęs su darbuotojų atlikta išsamia užsakymų informacija)

1 žingsnis. Sukurkite lentelę „sample_joins“ su stulpelių pavadinimais, darbuotojų vardais, pavardėmis, amžiais, adresais ir atlyginimais.

2 žingsnis) Duomenų įkėlimas ir rodymas

Iš aukščiau pateikto ekrano

  1. Įkeliami duomenys į „sample_joins“ iš „Customers.txt“
  2. Rodomas lentelės turinio pavyzdys

3 žingsnis) Lentelės „sample_joins1“ sukūrimas ir duomenų įkėlimas, rodymas

Iš pirmiau pateiktos ekrano kopijos galime stebėti šiuos dalykus

  1. Lentelės „sample_joins1“ su stulpeliais „Orderid“, „Data1“, „Id“, „Suma“ sukūrimas
  2. Duomenys įkeliami į sample_joins1 iš order.txt
  3. Rodomi įrašai, esantys pavyzdyje_joins1

Eidami į priekį pamatysime skirtingus sujungimų tipus, kuriuos galima atlikti mūsų sukurtose lentelėse, tačiau prieš tai turite apsvarstyti šiuos sujungimo taškus.

Keli dalykai, kuriuos reikia stebėti prisijungus:

  • Prisijungti leidžiama tik „Equality“ prisijungimas
  • Toje pačioje užklausoje galima sujungti daugiau nei dvi lenteles
  • LEFT, DIGHT, FULL OUTER prisijungia, kad būtų galima geriau kontroliuoti ON sąlygą, kuriai nėra atitikties
  • Prisijungimai nėra komutaciniai
  • Prisijungimai yra asociatyvūs kairėje, neatsižvelgiant į tai, ar jie yra kairieji, ar dešinieji

Skirtingo tipo sujungimai

Sujungimai yra 4 tipų, tai yra

  • Vidinis prisijungimas
  • Kairysis išorinis sujungimas
  • Dešinysis išorinis prisijungimas
  • Visiškas išorinis prisijungimas

Vidinis prisijungimas:

Abiejų lentelių bendri įrašai bus gauti iš šio vidinio prisijungimo.

Iš pirmiau pateiktos ekrano kopijos galime stebėti šiuos dalykus

  1. Čia mes atliekame prisijungimo užklausą naudodami JOIN raktinį žodį tarp lentelių sample_joins ir sample_joins1 su atitikimo sąlyga kaip (c.Id = o.Id).
  2. Išvestis, rodanti bendruosius įrašus, yra abiejose lentelėse, patikrindama užklausoje nurodytą sąlygą

Užklausa:

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

Kairysis išorinis prisijungimas:

  • „Hive“ užklausos kalba LEFT OUTER JOIN grąžina visas kairiosios lentelės eilutes, net jei dešinėje lentelėje nėra atitikmenų
  • Jei „ON“ sąlyga atitinka nulį įrašų dešinėje lentelėje, prisijungimai vis tiek grąžina rezultato įrašą su NULL kiekviename dešinės lentelės stulpelyje.

Iš pirmiau pateiktos ekrano kopijos galime stebėti šiuos dalykus

  1. Čia mes atliekame prisijungimo užklausą, naudodami raktinį žodį „LEFT OUTER JOIN“ tarp lentelių sample_joins ir sample_joins1 su atitikimo sąlyga kaip (c.Id = o.Id).

    Pavyzdžiui, čia mes naudojame darbuotojo ID kaip nuorodą, jis patikrina, ar ID yra bendras dešinėje, taip pat kairėje lentelėje, ar ne. Tai veikia kaip atitikimo sąlyga.

  2. Išvestis, rodanti bendrus įrašus, yra abiejose lentelėse, patikrindama užklausoje nurodytą sąlygą.

    NULL reikšmės aukščiau pateiktame išvestyje yra stulpeliai be dešiniojo lentelės reikšmių, kuri yra sample_joins1

Užklausa:

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

Dešinysis išorinis sujungimas:

  • „Hive“ užklausos kalba „RIGHT OUTER JOIN“ grąžina visas eilutes iš lentelės „Dešinė“, net jei kairėje lentelėje nėra atitikmenų
  • Jei „ON“ sąlyga kairėje lentelėje sutampa su nuliu įrašų, sujungimai vis tiek grąžina įrašą rezultate, o „NULL“ yra kiekviename kairiosios lentelės stulpelyje.
  • „RIGHT“ prisijungimas visada grąžina įrašus iš dešinės lentelės ir suderintus įrašus iš kairės lentelės. Jei kairėje lentelėje nėra jokių stulpelį atitinkančių verčių, toje vietoje bus pateiktos NULL reikšmės.

Iš pirmiau pateiktos ekrano kopijos galime stebėti šiuos dalykus

  1. Čia mes atliekame prisijungimo užklausą naudodami raktinį žodį „RIGHT OUTER JOIN“ tarp lentelių sample_joins ir sample_joins1 su atitikimo sąlyga kaip (c.Id = o.Id).
  2. Išvestis, rodanti bendruosius įrašus, yra abiejose lentelėse, patikrindama užklausoje nurodytą sąlygą

Užklausa :

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

Visas išorinis sujungimas:

Remiantis užklausoje pateikta JOIN sąlyga, ji sujungia lentelių sample_joins ir sample_joins1 įrašus.

Jis grąžina visus įrašus iš abiejų lentelių ir užpildo NULL reikšmes stulpeliuose, kurių trūksta verčių, atitinkančių abi puses.

Iš aukščiau pateikto ekrano kadro galime stebėti:

  1. Čia mes atliekame prisijungimo užklausą, naudodami raktinį žodį „PILNAS IŠORINIS PRISIJUNGIMAS“ tarp lentelių „sample_joins“ ir „sample_joins1“ su atitikimo sąlyga kaip (c.Id = o.Id).
  2. Išvestis, rodanti visus abiejose lentelėje esančius įrašus, patikrinant užklausoje nurodytą sąlygą. Nulinės vertės išvestyje čia nurodo trūkstamas vertes iš abiejų lentelių stulpelių.

Užklausa

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

Papildomos užklausos:

Užklausa, esanti užklausoje, vadinama antrine užklausa. Pagrindinė užklausa priklausys nuo subklausų grąžintų verčių.

Paklausas galima suskirstyti į dvi rūšis

  • Paklausos FROM sąlygoje
  • Paklausos WHERE sąlygoje

Kada naudoti:

  • Norėdami gauti tam tikrą vertę iš dviejų stulpelių verčių iš skirtingų lentelių
  • Vienos lentelės reikšmių priklausomybė nuo kitų lentelių
  • Lyginamasis vieno stulpelio verčių patikrinimas iš kitų lentelių

Sintaksė:

Subquery in FROM clauseSELECT From (SubQuery) Subquery in WHERE clauseSELECT  FromWHERE col1 IN (SubQuery);

Pavyzdys:

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

Čia t1 ir t2 yra lentelių pavadinimai. Spalvotas yra Subquery, atliktas ant t1 stalo. Čia a ir b yra stulpeliai, pridedami prie užklausos ir priskirti col1. Col1 yra stulpelio vertė, esanti pagrindinėje lentelėje. Šis užklausoje esantis stulpelis „col1“ yra lygiavertis pagrindinei lentelės užklausai stulpelyje col1.

Tinkintų scenarijų įdėjimas:

„Hive“ suteikia galimybę rašyti vartotojui skirtus scenarijus pagal kliento reikalavimus. Vartotojai gali parašyti savo žemėlapį ir sumažinti scenarijus pagal reikalavimus. Tai vadinama „Embedded Custom“ scenarijais. Kodavimo logika yra apibrėžta pasirinktiniuose scenarijuose ir mes galime naudoti tą scenarijų per ETL laiką.

Kada pasirinkti įterptinius scenarijus:

  • Pagal konkrečius kliento reikalavimus kūrėjai turi rašyti ir diegti scenarijus „Hive“
  • Kur „Hive“ integruotos funkcijos neveikia pagal konkrečius domeno reikalavimus

Tam „Hive“ ji naudoja sąlygą TRANSFORM, kad įdėtų žemėlapių ir reduktorių scenarijus.

Šiuose įterptuosiuose scenarijuose turime atsižvelgti į šiuos dalykus

  • Stulpeliai bus pertvarkyti į eilutę ir atskirti TAB prieš suteikiant juos vartotojo scenarijui
  • Standartinė vartotojo scenarijaus išvestis bus traktuojama kaip TAB atskirtos eilutės stulpeliai

Įterptojo scenarijaus pavyzdys,

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;

Remdamiesi aukščiau pateiktu scenarijumi, galime pastebėti šiuos dalykus

Tai tik pavyzdinis scenarijus, skirtas suprasti

  • pv_users yra vartotojų lentelė, turinti tokius laukus kaip userid ir data, kaip nurodyta map_script
  • Reduktoriaus scenarijus, apibrėžtas lentelių „pv_users“ data ir skaičiumi