Připojit úl & Výukový program SubQuery s příklady

Obsah:

Anonim

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

  1. Načítání dat do sample_joins z Customers.txt
  2. 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í

  1. Vytvoření tabulky sample_joins1 se sloupci Orderid, Date1, Id, Amount
  2. Načítání dat do sample_joins1 z commands.txt
  3. 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í

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

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

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

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

  1. 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).
  2. 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 clauseSELECT From (SubQuery) Subquery in WHERE clauseSELECT  FromWHERE 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