Pripojte sa k úlu & Výukový program SubQuery s príkladmi

Obsah:

Anonim

V tomto návode sa naučíte

  • Pripojte sa k dotazom
  • Iný typ spojenia
  • Podotázky
  • Vkladanie vlastných skriptov
  • UDF (funkcie definované používateľom)

Pripojiť sa k dotazom:

Dopyty na spojenie môžu fungovať na dvoch tabuľkách prítomných v úli. Pre pochopenie toho, ako sú tu koncepty spojené, tu jasne vytvárame dve tabuľky,

  • Sample_joins (súvisiace s podrobnosťami zákazníkov)
  • Sample_joins1 (súvisí s podrobnosťami objednávok vykonanými zamestnancami)

Krok 1) Vytvorenie tabuľky „sample_joins“ s názvami stĺpcov ID, menom, vekom, adresou a platom zamestnancov

Krok 2) Načítanie a zobrazenie údajov

Z vyššie uvedenej snímky obrazovky

  1. Načítavajú sa údaje do sample_joins zo súboru Customers.txt
  2. Zobrazuje sa obsah tabuľky sample_joins

Krok 3) Vytvorenie tabuľky sample_joins1 a načítanie, zobrazenie údajov

Z vyššie uvedeného screenshotu môžeme sledovať nasledujúce

  1. Vytvorenie tabuľky sample_joins1 so stĺpcami Orderid, Date1, Id, Amount
  2. Načítavajú sa údaje do sample_joins1 z objednávky.txt
  3. Zobrazujú sa záznamy prítomné v sample_joins1

Ďalej uvidíme rôzne typy spojení, ktoré je možné vykonať v tabuľkách, ktoré sme vytvorili, ale predtým musíte zvážiť nasledujúce body pre pripojenia.

Niektoré body, ktoré treba dodržiavať v súvislosti s pripojením:

  • V pripojeniach sú povolené iba spojenia rovnosti
  • V jednom dotaze môžu byť spojené viac ako dve tabuľky
  • Ľavé, pravé, plné vonkajšie spojenia existujú, aby poskytovali väčšiu kontrolu nad klauzulou ON, pre ktorú neexistuje zhoda
  • Spojenia nie sú komutatívne
  • Spojenia sú ľavostranne asociatívne bez ohľadu na to, či ide o LEVÉ alebo PRAVÉ spojenie

Iný typ spojenia

Spojenia sú 4 typov, to sú

  • Vnútorné spojenie
  • Ľavý vonkajší spoj
  • Správne vonkajšie
  • Úplné vonkajšie pripojenie

Vnútorné pripojenie:

Záznamy spoločné pre obidve tabuľky budú načítané týmto vnútorným spojením.

Z vyššie uvedeného screenshotu môžeme sledovať nasledujúce

  1. Tu vykonávame dotaz na spojenie pomocou kľúčového slova JOIN medzi tabuľkami sample_joins a sample_joins1 so zhodnou podmienkou ako (c.Id = o.Id).
  2. Výstup zobrazujúci bežné záznamy prítomné v obidvoch tabuľkách kontrolou stavu uvedeného v dotaze

Dopyt:

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

Ľavý vonkajší spoj:

  • Jazyk dotazu podregistra LEFT OUTER JOIN vráti všetky riadky z ľavej tabuľky, aj keď v pravej tabuľke nie sú žiadne zhody
  • Ak klauzula ON zodpovedá nulovým záznamom v pravej tabuľke, spojenia stále vrátia záznam vo výsledku s NULL v každom stĺpci z pravej tabuľky

Z vyššie uvedeného screenshotu môžeme sledovať nasledujúce

  1. Tu vykonávame dotaz na spojenie pomocou kľúčového slova „LEFT OUTER JOIN“ medzi tabuľkami sample_joins a sample_joins1 so zhodnou podmienkou ako (c.Id = o.Id).

    Napríklad tu ako referenciu používame id zamestnanca, ktorý kontroluje, či je id bežný v pravej aj ľavej tabuľke, alebo nie. Funguje to ako podmienka zhody.

  2. Výstup zobrazujúci bežné záznamy prítomné v obidvoch tabuľkách kontrolou stavu uvedeného v dotaze.

    Hodnoty NULL vo vyššie uvedenom výstupe sú stĺpce bez hodnôt z pravej tabuľky, ktorá je sample_joins1

Dopyt:

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

Pravý vonkajší spoj:

  • Jazyk dotazu podregistra RIGHT OUTER JOIN vráti všetky riadky z pravej tabuľky, aj keď v ľavej tabuľke nie sú žiadne zhody
  • Ak klauzula ON zodpovedá nulovým záznamom v ľavej tabuľke, spojenia stále vrátia záznam vo výsledku s hodnotou NULL v každom stĺpci z ľavej tabuľky
  • PRAVÉ spojenia vždy vrátia záznamy z pravej tabuľky a zhodné záznamy z ľavej tabuľky. Ak ľavá tabuľka nemá žiadne hodnoty zodpovedajúce stĺpcu, vráti na tomto mieste NULL hodnoty.

Z vyššie uvedeného screenshotu môžeme sledovať nasledujúce

  1. Tu vykonávame dotaz na spojenie pomocou kľúčového slova „RIGHT OUTER JOIN“ medzi tabuľkami sample_joins a sample_joins1 so zhodnou podmienkou ako (c.Id = o.Id).
  2. Výstup zobrazujúci bežné záznamy prítomné v obidvoch tabuľkách kontrolou stavu uvedeného v dotaze

Dopyt :

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

Úplné vonkajšie spojenie:

Kombinuje záznamy tabuliek sample_joins aj sample_joins1 na základe podmienky JOIN uvedenej v dotaze.

Vráti všetky záznamy z oboch tabuliek a vyplní NULL hodnoty pre stĺpce, ktorým chýbajú hodnoty zhodujúce sa na oboch stranách.

Z vyššie uvedeného obrazovky môžeme sledovať nasledovné:

  1. Tu vykonávame dotaz na spojenie pomocou kľúčového slova „FULL OUTER JOIN“ medzi tabuľkami sample_joins a sample_joins1 so zhodnou podmienkou ako (c.Id = o.Id).
  2. Výstup zobrazujúci všetky záznamy prítomné v obidvoch tabuľkách kontrolou stavu uvedeného v dotaze. Nulové hodnoty na výstupe tu označujú chýbajúce hodnoty zo stĺpcov oboch tabuliek.

Dopyt

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

Podotázky:

Dotaz prítomný v dotaze sa nazýva subotázka. Hlavný dopyt bude závisieť od hodnôt vrátených poddotazmi.

Poddotazy možno rozdeliť do dvoch typov

  • Poddotazy v klauzule FROM
  • Poddotazy v klauzule WHERE

Kedy použiť:

  • Ak chcete získať konkrétnu hodnotu kombinovanú z dvoch hodnôt stĺpca z rôznych tabuliek
  • Závislosť hodnôt jednej tabuľky na iných tabuľkách
  • Porovnávacia kontrola hodnôt jedného stĺpca z iných tabuliek

Syntax:

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

Príklad:

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

Tu t1 a t2 sú názvy tabuliek. Farebnou farbou je poddotaz vykonaný na stole t1. Tu a a b sú stĺpce, ktoré sa pridávajú do poddotazu a priraďujú sa k stĺpcu1. Col1 je hodnota stĺpca v hlavnej tabuľke. Tento stĺpec "col1" prítomný v poddotazu je ekvivalentný s dotazom hlavnej tabuľky v stĺpci col1.

Vkladanie vlastných skriptov:

Hive poskytuje uskutočniteľnosť písania skriptov špecifických pre používateľa podľa požiadaviek klienta. Používatelia môžu písať svoje vlastné mapy a podľa potreby redukovať počet skriptov. Nazývajú sa vložené vlastné skripty. Logika kódovania je definovaná vo vlastných skriptoch a tento skript môžeme použiť v čase ETL.

Kedy zvoliť vložené skripty:

  • V prípade špecifických požiadaviek klienta musia vývojári písať a nasadzovať skripty v úli
  • Kde zabudované funkcie Hive nebudú fungovať pre konkrétne doménové požiadavky

Na tento účel v úli používa klauzulu TRANSFORM na vloženie mapových aj redukčných skriptov.

V tomto vloženom vlastnom skripte musíme dodržiavať nasledujúce body

  • Pred vložením do používateľského skriptu budú stĺpce transformované na reťazec a oddelené tabulátorom
  • Štandardný výstup používateľského skriptu bude považovaný za stĺpce reťazca oddelené TAB

Ukážka vloženého skriptu,

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;

Z vyššie uvedeného skriptu môžeme sledovať nasledujúce

Toto je iba ukážkový skript na pochopenie

  • pv_users je tabuľka používateľov, ktorá obsahuje polia ako userid a date, ako je uvedené v map_script
  • Skript redukcie definovaný k dátumu a počtu tabuliek pv_users