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
- Načítavajú sa údaje do sample_joins zo súboru Customers.txt
- 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
- Vytvorenie tabuľky sample_joins1 so stĺpcami Orderid, Date1, Id, Amount
- Načítavajú sa údaje do sample_joins1 z objednávky.txt
- 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
- 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).
- 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
- 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.
- 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
- 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).
- 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é:
- 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).
- 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 clauseSELECTFrom (SubQuery) Subquery in WHERE clauseSELECT From WHERE 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