Dotazy na podregistr: seřadit podle, seskupit podle, distribuovat podle, Cluster Podle příkladů

Hive navíc poskytuje dotazovací jazyk typu SQL pro účely ETL Hadoop souborový systém.

Hive Query language (HiveQL) poskytuje prostředí typu SQL v Hive pro práci s tabulkami, databázemi, dotazy.

Můžeme mít k Hive přidružený jiný typ klauzulí, abychom mohli provádět různé manipulace s daty a dotazování. Pro lepší konektivitu s různými uzly mimo prostředí. HIVE poskytuje také připojení JDBC.

Hive queries poskytuje následující funkce:

  • Datové modelování, jako je tvorba databází, tabulek atd.
  • Funkce ETL, jako je extrakce, transformace a načítání dat do tabulek
  • Připojuje ke sloučení různých datových tabulek
  • Uživatelsky specifické uživatelské skripty pro usnadnění kódu
  • Rychlejší dotazovací nástroj nad Hadoopem

Vytvoření tabulky v Hive

Před zahájením našeho hlavního tématu tohoto výukového programu nejprve vytvoříme tabulku, kterou použijeme jako reference pro následující výukový program.

Zde v tomto tutoriálu vytvoříme tabulku „employees_guru“ se 6 sloupci.

Vytvoření tabulky v Hive

Z výše uvedeného snímku obrazovky

  1. Vytváříme tabulku „employees_guru“ se 6 hodnotami sloupců, jako je ID, Jméno, Věk, Adresa, Plat, Oddělení, která patří zaměstnancům přítomným v organizaci „guru“.
  2. Zde v tomto kroku načítáme data do tabulky staff_guru. Data, která se chystáme načíst, budou umístěna do souboru Employees.txt

Objednávejte podle dotazu

Syntaxe ORDER BY v HiveQL je podobná syntaxi ORDER BY in SQL Jazyk.

Seřadit podle je klauzule, kterou používáme s příkazem „SELECT“. Dotazy na úl, který pomáhá třídit data. Seřadit podle klauzule použijte sloupce v tabulkách podregistru k seřazení konkrétních hodnot sloupců uvedených v Řazení podle. Pro jakýkoli název sloupce definujeme pořadí podle klauzule, dotaz vybere a zobrazí výsledky ve vzestupném nebo sestupném pořadí jednotlivých hodnot sloupců.

Pokud je uvedené pořadí podle pole řetězec, zobrazí výsledek v lexikografickém pořadí. Na zadním konci musí být předán jedinému reduktoru.

Řadit podle dotazu

Ze snímku obrazovky výše můžeme pozorovat následující

  1. Je to dotaz, který provádíte na tabulce „employees_guru“ s klauzulí ORDER BY s názvem oddělení definovaným názvem sloupce ORDER BY. „Department“ je String, takže zobrazí výsledky na základě lexikografického pořadí.
  2. Toto je skutečný výstup pro dotaz. Pokud to pozorujeme správně, můžeme vidět, že dostává výsledky zobrazené na základě sloupce Oddělení, jako je ADMIN, Finance a tak dále v orderQuery, který má být proveden.

dotaz:

SELECT * FROM employees_guru ORDER BY Department;

Seskupit podle dotazu

Seskupit podle klauzule použijte sloupce v tabulkách podregistru pro seskupení konkrétních hodnot sloupců uvedených u skupiny podle. Pro jakýkoli název sloupce definujeme klauzuli „groupby“, dotaz vybere a zobrazí výsledky seskupením hodnot konkrétního sloupce.

Například na níže uvedeném snímku obrazovky se zobrazí celkový počet zaměstnanců přítomných v každém oddělení. Zde máme „Oddělení“ jako skupinu podle hodnoty.

Seskupit podle dotazu

Z výše uvedeného snímku obrazovky uvidíme následující

  1. Je to dotaz, který se provádí na tabulku „employees_guru“ s klauzulí GROUP BY s názvem sloupce GROUP BY definovaným oddělením.
  2. Zde zobrazený výstup je název oddělení a zaměstnanci se počítají v různých odděleních. Zde jsou všichni zaměstnanci patřící do konkrétního oddělení seskupeni a zobrazeni ve výsledcích. Výsledkem je název oddělení s celkovým počtem zaměstnanců přítomných v každém oddělení.

Dotaz:

SELECT Department, count(*) FROM employees_guru GROUP BY Department;

Seřadit podle

Klauzule Sort by se provádí podle názvů sloupců tabulek podregistru a třídí výstup. Můžeme zmínit DESC pro řazení v sestupném pořadí a ASC pro vzestupné pořadí řazení.

Při tomto řazení seřadí řádky před podáváním do reduktoru. Vždy seřadit podle závisí na typech sloupců.

Pokud jsou například typy sloupců číselné, seřadí se v číselném pořadí, pokud jsou typy sloupců řetězcové, seřadí se v lexikografickém pořadí.

Seřazeno podle

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

  1. Je to dotaz, který provádí na tabulce „employees_guru“ s klauzulí SORT BY s „id“, jak definuje název sloupce SORT BY. Použili jsme klíčové slovo DESC.
  2. Takže zobrazený výstup bude v sestupném pořadí „id“.

Dotaz:

SELECT * from employees_guru SORT BY Id DESC;

Cluster By

Cluster By se používá jako alternativa pro klauzule Distribute BY a Sort BY v Hive-QL.

Cluster Klauzule BY použitá na tabulkách přítomných v Hive. Hive používá sloupce v Cluster rozdělením řádků mezi redukce. Cluster Sloupce BY přejdou na vícenásobné redukce.

  • Zajišťuje řazení hodnot přítomných ve více reduktorech

Například, Cluster Podle klauzule uvedené v názvu sloupce ID tabulky zaměstnanci_guru. Výstup při provádění tohoto dotazu poskytne výsledky více reduktorům na zadním konci. Ale jako frontend je to alternativní klauzule pro Sort By a Distribute By.

Toto je ve skutečnosti proces back-end, když provádíme dotaz s řazením podle, seskupováním podle a shlukováním podle rámce omezení mapy. Pokud tedy chceme uložit výsledky do více reduktorů, použijeme Cluster By.

Cluster By

Z výše uvedeného snímku obrazovky získáváme následující postřehy:

  1. Je to dotaz, který provádí klauzuli CLUSTER BY na hodnotě pole Id. Tady se to seřadí podle hodnot ID.
  2. Zobrazuje ID a jména přítomná v seřazení podle guru_employees

Dotaz:

SELECT  Id, Name from employees_guru CLUSTER BY Id;

Distribuovat podle

Klauzule Distribute BY použitá na tabulkách přítomných v Hive. Hive používá sloupce v Distribute by k rozdělení řádků mezi redukce. Všechny sloupce Distribute BY půjdou do stejné redukce.

  • Zajišťuje, že každý z N reduktorů získá nepřekrývající se rozsahy sloupce
  • Netřídí výstup každého reduktoru

Distribuovat podle

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

  1. DISTRIBUTE BY Klauzule fungující na ID tabulky „empoloyees_guru“.
  2. Výstup zobrazující Id, Name. Na zadním konci to půjde do stejného reduktoru

Dotaz:

SELECT  Id, Name from employees_guru DISTRIBUTE BY Id;