V tomto výukovém programu se naučíte
- Připojte se k dotazům
- Jiný typ spojení
- Dílčí dotazy
- Vkládání vlastních skriptů
- UDF (funkce definované uživatelem)
Připojit dotazy:
Dotazy na spojení lze provádět na dvou tabulkách přítomných v Hive. Abychom porozuměli pojmům Připojit koncepty, vytváříme zde dvě tabulky,
- Sample_joins (související s podrobnostmi zákazníků)
- Sample_joins1 (Souvisí s podrobnostmi objednávek prováděných zaměstnanci)
Krok 1) Vytvoření tabulky „sample_joins“ s názvy sloupců ID, jméno, věk, adresa a plat zaměstnanců
Krok 2) Načítání a zobrazování dat
Z výše uvedeného snímku obrazovky
- Načítání dat do sample_joins z Customers.txt
- Zobrazení obsahu tabulky sample_joins
Krok 3) Vytvoření tabulky sample_joins1 a načítání, zobrazení dat
Z výše uvedeného snímku obrazovky můžeme sledovat následující
- Vytvoření tabulky sample_joins1 se sloupci Orderid, Date1, Id, Amount
- Načítání dat do sample_joins1 z commands.txt
- Zobrazení záznamů přítomných v sample_joins1
Pohybem vpřed uvidíme různé typy spojení, které lze provést v tabulkách, které jsme vytvořili, ale předtím musíte zvážit následující body pro spojení.
Některé body, které je třeba dodržet v Joins:
- V připojeních jsou povolena pouze spojení rovnosti
- K jednomu dotazu lze připojit více než dvě tabulky
- Existují spojení LEFT, RIGHT, FULL OUTER s cílem poskytnout větší kontrolu nad klauzulí ON, pro kterou neexistuje shoda
- Spojení nejsou komutativní
- Spojení jsou levou asociativní bez ohledu na to, zda se jedná o LEVÉ nebo PRAVÉ spojení
Jiný typ spojení
Spojení jsou 4 typů, to jsou
- Vnitřní spojení
- Levý vnější spoj
- Pravý vnější spoj
- Úplné vnější připojení
Vnitřní spojení:
Záznamy společné pro obě tabulky budou získány tímto vnitřním spojením.
Z výše uvedeného snímku obrazovky můžeme sledovat následující
- Zde provádíme spojovací dotaz pomocí klíčového slova JOIN mezi tabulkami sample_joins a sample_joins1 se shodnou podmínkou jako (c.Id = o.Id).
- Výstup zobrazující běžné záznamy přítomné v obou tabulkách kontrolou stavu uvedeného v dotazu
Dotaz:
SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);
Levý vnější spoj:
- Jazyk dotazu Hive LEFT OUTER JOIN vrací všechny řádky z levé tabulky, i když v pravé tabulce nejsou žádné shody
- Pokud klauzule ON odpovídá nulovým záznamům v pravé tabulce, spojení stále vrátí záznam ve výsledku s NULL v každém sloupci z pravé tabulky
Z výše uvedeného snímku obrazovky můžeme sledovat následující
- Zde provádíme spojovací dotaz pomocí klíčového slova "LEFT OUTER JOIN" mezi tabulkami sample_joins a sample_joins1 s odpovídající podmínkou jako (c.Id = o.Id).
Například zde používáme ID zaměstnance jako referenci, kontroluje, zda je ID běžné v pravé i levé tabulce nebo ne. Funguje jako podmínka shody.
- Výstup zobrazující běžné záznamy přítomné v obou tabulkách kontrolou stavu uvedeného v dotazu.
Hodnoty NULL ve výše uvedeném výstupu jsou sloupce bez hodnot z pravé tabulky, která je sample_joins1
Dotaz:
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ý vnější spoj:
- Jazyk dotazu Hive RIGHT OUTER JOIN vrátí všechny řádky z pravé tabulky, přestože v levé tabulce nejsou žádné shody
- Pokud klauzule ON odpovídá nulovým záznamům v levé tabulce, spojení stále vrátí záznam ve výsledku s NULL v každém sloupci z levé tabulky
- PRAVÉ spojení vždy vrátí záznamy z pravé tabulky a odpovídající záznamy z levé tabulky. Pokud levá tabulka nemá žádné hodnoty odpovídající sloupci, vrátí na tomto místě hodnoty NULL.
Z výše uvedeného snímku obrazovky můžeme sledovat následující
- Zde provádíme spojovací dotaz pomocí klíčového slova „RIGHT OUTER JOIN“ mezi tabulkami sample_joins a sample_joins1 se shodnou podmínkou jako (c.Id = o.Id).
- Výstup zobrazující běžné záznamy přítomné v obou tabulkách kontrolou stavu uvedeného v dotazu
Dotaz :
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é vnější spojení:
Kombinuje záznamy obou tabulek sample_joins a sample_joins1 na základě podmínky JOIN uvedené v dotazu.
Vrátí všechny záznamy z obou tabulek a vyplní hodnoty NULL pro sloupce s chybějícími hodnotami shodnými na obou stranách.
Z výše uvedeného snímku obrazovky můžeme sledovat následující:
- Zde provádíme dotaz na spojení pomocí klíčového slova „FULL OUTER JOIN“ mezi tabulkami sample_joins a sample_joins1 se shodnou podmínkou jako (c.Id = o.Id).
- Výstup zobrazující všechny záznamy přítomné v obou tabulkách kontrolou stavu uvedeného v dotazu. Nulové hodnoty ve výstupu zde označují chybějící hodnoty ze sloupců obou tabulek.
Dotaz
SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)
Dílčí dotazy:
Dotaz v dotazu je známý jako dílčí dotaz. Hlavní dotaz bude záviset na hodnotách vrácených poddotazy.
Poddotazy lze rozdělit do dvou typů
- Poddotazy v klauzuli FROM
- Poddotazy v klauzuli WHERE
Kdy použít:
- Chcete-li získat konkrétní hodnotu kombinovanou ze dvou hodnot sloupců z různých tabulek
- Závislost hodnot jedné tabulky na ostatních tabulkách
- Srovnávací kontrola hodnot jednoho sloupce z jiných tabulek
Syntax:
Subquery in FROM clauseSELECTFrom (SubQuery) Subquery in WHERE clauseSELECT From WHERE col1 IN (SubQuery);
Příklad:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
Zde t1 a t2 jsou názvy tabulek. Barevný je poddotaz provedený na tabulce t1. Zde a a b jsou sloupce, které jsou přidány v poddotazu a přiřazeny ke sloupci 1. Col1 je hodnota sloupce v hlavní tabulce. Tento sloupec "col1" přítomný v poddotazu je ekvivalentní hlavnímu dotazu na tabulku ve sloupci col1.
Vkládání vlastních skriptů:
Hive poskytuje proveditelnost psaní specifických uživatelských skriptů pro požadavky klienta. Uživatelé mohou psát vlastní mapu a zmenšovat skripty podle požadavků. Tito se nazývají vložené vlastní skripty. Logika kódování je definována ve vlastních skriptech a můžeme tento skript použít v čase ETL.
Kdy zvolit vložené skripty:
- Ve specifických požadavcích klienta musí vývojáři psát a nasazovat skripty v Hive
- Kde vestavěné funkce Hive nebudou fungovat pro specifické požadavky domény
K tomu v Hive používá klauzuli TRANSFORM k vložení mapových i redukčních skriptů.
V tomto vloženém vlastním skriptu musíme dodržovat následující body
- Sloupce budou před předáním uživatelskému skriptu transformovány na řetězec a odděleny TAB
- Standardní výstup uživatelského skriptu bude považován za sloupce řetězce oddělené tabulátorem
Ukázka 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 výše uvedeného skriptu můžeme sledovat následující
Toto je pouze ukázkový skript pro porozumění
- pv_users je tabulka uživatelů, která obsahuje pole jako userid a date, jak je uvedeno v map_script
- Redukční skript definovaný k datu a počtu tabulek pv_users