Výukový program Hive Join & SubQuery s příklady

Připojte se k dotazům

Spojovací dotazy se mohou provádět na dvou tabulkách přítomných v Hive. Pro pochopení Připojte se Concepts jasně zde vytváříme dvě tabulky,

  • Sample_joins (souvisí s podrobnostmi o zákaznících)
  • Sample_joins1 (Souvisí s podrobnostmi objednávek provedených zaměstnanci)

Krok 1) Vytvoření tabulky „sample_joins“ s názvy sloupců ID, Jméno, Věk, adresa a plat zaměstnanců

Připojte se k dotazům

Krok 2) Načítání a zobrazování dat

Připojte se k dotazům

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čtení, zobrazení dat

Připojte se k dotazům

Z výše uvedeného snímku obrazovky můžeme pozorovat následující

  1. Vytvoření tabulky sample_joins1 se sloupci Orderid, Date1, Id, Amount
  2. Načítání dat do sample_joins1 z orders.txt
  3. Zobrazení záznamů přítomných v sample_joins1

V budoucnu uvidíme různé typy spojení, které lze provést na 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 v Joins sledovat:

  • Ve spojeních jsou povolena pouze spojení Equality
  • V jednom dotazu lze spojit více než dvě tabulky
  • LEVÉ, PRAVÉ, ÚPLNÉ VNĚJŠÍ spojení existují za účelem poskytnutí větší kontroly nad klauzulí ON, pro kterou neexistuje žádná shoda
  • Spojení nejsou komutativní
  • Spojení jsou levá asociativní bez ohledu na to, zda se jedná o LEVÉ nebo PRAVÉ spojení

Různé typy spojů

Spoje jsou 4 typů, tyto jsou

  • Vnitřní spojení
  • Levý vnější spoj
  • Pravé vnější spojení
  • Úplné vnější připojení

Vnitřní spojení:

Záznamy společné pro oba stoly budou načteny tímto vnitřním spojením.

Vnitřní spojení

Z výše uvedeného snímku obrazovky můžeme pozorovat následující

  1. Zde provádíme spojovací dotaz pomocí klíčového slova JOIN mezi tabulkami sample_joins a sample_joins1 s podmínkou shody jako (c.Id= o.Id).
  2. Výstup zobrazující společné záznamy přítomné v obou tabulkách kontrolou podmínky uvedené 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:

  • Dotazovací jazyk Hive LEFT OUTER JOIN vrátí všechny řádky z levé tabulky, i když v pravé tabulce nejsou žádné shody
  • Pokud klauzule ON odpovídá nule záznamů v pravé tabulce, spojení stále vracejí záznam ve výsledku s NULL v každém sloupci z pravé tabulky.

Levý vnější spoj

Z výše uvedeného snímku obrazovky můžeme pozorovat 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 společné v pravé i levé tabulce nebo ne. Funguje jako odpovídající podmínka.
  2. Výstup zobrazující společné záznamy přítomné v obou tabulkách kontrolou podmínky uvedené 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ší spojení:

  • Dotazovací jazyk podregistru RIGHT OUTER JOIN vrátí všechny řádky z pravé tabulky, i když v levé tabulce nejsou žádné shody
  • Pokud klauzule ON odpovídá nule záznamů v levé tabulce, spojení stále vracejí 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 neobsahuje žádné hodnoty odpovídající danému sloupci, vrátí na tomto místě hodnoty NULL.

Pravé vnější spojení

Z výše uvedeného snímku obrazovky můžeme pozorovat 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 s odpovídající podmínkou jako (c.Id= o.Id).
  2. Výstup zobrazující společné záznamy přítomné v obou tabulkách kontrolou podmínky uvedené 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 doplní hodnoty NULL pro sloupce, kterým chybí hodnoty odpovídající na obou stranách.

Plné vnější spojení

Z výše uvedeného snímku obrazovky můžeme pozorovat následující:

  1. Zde provádíme spojovací dotaz pomocí klíčového slova „FULL OUTER JOIN“ mezi tabulkami sample_joins a sample_joins1 s podmínkou shody jako (c.Id= o.Id).
  2. Výstup zobrazující všechny záznamy přítomné v obou tabulkách kontrolou podmínky uvedené v dotazu. Hodnoty Null 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 přítomný v dotazu se nazývá dílčí dotaz. Hlavní dotaz bude záviset na hodnotách vrácených dílčími dotazy.

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 jiných tabulkách
  • Srovnávací kontrola hodnot jednoho sloupce z jiných tabulek

Syntaxe:

Subquery in FROM clause
SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main >
Subquery in WHERE clause
SELECT <column names 1, 2…n> From<TableName_Main>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ý v tabulce t1. Zde aab jsou sloupce, které jsou přidány do poddotazu a přiřazeny col1. Sloupec1 je hodnota sloupce v hlavní tabulce. Tento sloupec „col1“ přítomný v poddotazu je ekvivalentní dotazu hlavní tabulky ve sloupci col1.

Vkládání vlastních skriptů

Úl poskytuje proveditelnost psaní uživatelských specifických skriptů pro požadavky klienta. Uživatelé mohou psát vlastní mapu a redukovat skripty podle požadavků. Tyto skripty 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:

  • V požadavcích specifických pro 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í jak mapových, tak redukčních skriptů.

V těchto vložených vlastních skriptech musíme dodržovat následující body

  • Sloupce budou transformovány na řetězec a odděleny klávesou TAB, než je předají uživatelskému skriptu
  • Standardní výstup uživatelského skriptu bude zpracován jako řetězcové sloupce oddělené TAB

Ukázkový vložený skript,

FROM (
	FROM pv_users
	MAP pv_users.userid, pv_users.date
	USING 'map_script'
	AS dt, uid
	CLUSTER BY dt) map_output

INSERT OVERWRITE TABLE pv_users_reduced
	REDUCE map_output.dt, map_output.uid
	USING 'reduce_script'
	AS date, count;

Z výše uvedeného skriptu můžeme vypozorovat následující

Toto je pouze ukázkový skript pro pochopení

  • pv_users je tabulka uživatelů, která má pole jako userid a date, jak je uvedeno v map_script
  • Redukční skript definovaný na datum a počet tabulek pv_users

Denní zpravodaj Guru99

Začněte svůj den s nejnovějšími a nejdůležitějšími zprávami o umělé inteligenci, které vám přinášíme právě teď.