Hive lekérdezések példái: Rendezés, Csoportosítás és Cluster By

⚡ Okos összefoglaló

A Hive lekérdezések az ORDER BY, GROUP BY, SORT BY, CLUSTER BY és DISTRIBUTE BY záradékokat használják a sorok rendezésére, csoportosítására és elosztására a reduktorok között, és minden egyes záradékot itt egyetlen minta employees táblán mutatunk be.

  • 🧱 Első minta táblázat: Az employees_guru hat oszloppal jön létre, és az Employees.txt fájlból töltődik be, mielőtt bármilyen záradékot lefutna.
  • 🔢 SORREND SZERINT ÖSSZESEN: Az ORDER BY a teljes eredményhalmazt egyetlen reduktorba küldi, ami garantálja a teljes sorrendet, de lelassítja a nagy lekérdezéseket.
  • 🔤 Karakterlánc-rendezés: Egy karakterlánc oszlop, mint például a Department, lexikográfiai sorrendben, nem pedig numerikus sorrendben kerül visszaadásra.
  • 📊 CSOPORTOSÍTÁS darabszám szerint: A GROUP BY és a count(*) párosítása részlegenként egy sort ad vissza, amely tartalmazza az alkalmazottak teljes számát.
  • 🔀 A RENDEZÉS SZERINT reduktoronként értendő: A RENDEZÉS SZERINT minden reduktoron belüli sorokat rendez, így több reduktor esetén részlegesen rendezett kimenetet kapunk.
  • 🎯 A CLUSTER BY kombinációi: A CLUSTER BY függvény egy DISTRIBUTE BY és egy SORT BY függvényként működik, míg a DISTRIBUTE BY önmagában egy rendezetlen reduktorhoz irányítja a megfelelő kulcsokat.

Hive lekérdezések rendezés szerint, csoportosítás szerint, Cluster és Forgalmazza

A Hive egy SQL-típusú lekérdezőnyelvet biztosít ETL célokra a következőkön felül: Hadoop fájlrendszer.

A Hive Query Language (HiveQL) SQL-típusú környezetet biztosít a Hive-ban táblázatok, adatbázisok és lekérdezések kezeléséhez.

Különböző típusú záradékok vannak társítva a Hive-hoz, hogy különböző típusú adatkezelést és lekérdezést hajtsanak végre, és a Hive JDBC-kapcsolatot biztosít a környezeten kívüli csomópontokkal való jobb kapcsolatok érdekében.

A Hive lekérdezések a következő szolgáltatásokat kínálják:

  • Adatmodellezés, például adatbázisok, táblázatok stb. létrehozása.
  • ETL funkciók, mint példáultracadatok táblázatokba való betöltése, átalakítása és áttöltése
  • csatlakozik különböző adattáblázatok összevonására
  • Felhasználóspecifikus egyéni szkriptek a kódolás megkönnyítése érdekében
  • Gyorsabb lekérdező eszköz a Hadoop tetején

Táblázat létrehozása a Hive-ben

Mielőtt belekezdenénk az oktatóanyag fő témájába, először létrehozunk egy táblázatot, amelyet referenciaként fogunk használni a következő szakaszokban.

Ebben az oktatóanyagban létrehozzuk az „employees_guru” táblát 6 oszloppal, ahogy az alábbi képernyőképen is látható.

Hive CREATE TABLE utasítás az employees_guru számára és a load parancs

A fenti képernyőképből

  1. Létrehozzuk az „employees_guru” táblázatot 6 oszlopértékkel, például azonosító, név, életkor, cím, fizetés, osztály, amelyek a „guru” szervezetben jelen lévő alkalmazottakhoz tartoznak.
  2. Ebben a lépésben adatokat töltünk be az employees_guru táblába. A betöltendő adatok az Employees.txt fájlban találhatók.

Rendelés lekérdezés szerint

A HiveQL ORDER BY szintaxisa hasonló az ORDER BY szintaxisához a következőben: SQL nyelv.

Az ORDER BY záradékot a „SELECT” utasítással használjuk a Hive lekérdezések az adatok rendezéséhez. A Hive-táblák oszlopait használja az ORDER BY függvény által említett oszlopértékek rendezéséhez, és a lekérdezés az eredményeket ezen értékek növekvő vagy csökkenő sorrendjében jeleníti meg.

Ha az említett ORDER BY mező egy karakterlánc, akkor az eredményt lexikográfiai sorrendben jeleníti meg. A háttérben a teljes eredményhalmazt egyetlen reduktornak kell átadni.

Ez az egyetlen reduktor a nagyméretű táblákon az ORDER BY függvényt is drágává teszi, tehát szigorú módban (hive.mapred.mode=strict) A Hive elutasítja az ORDER BY utasításokat, amelyek nem tartalmaznak LIMIT záradékot.

Az alábbi képernyőkép az ORDER BY lekérdezést és annak rendezett sorait mutatja.

ORDER BY lekérdezés az employees_guru oldalon, osztályok szerint rendezve

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Ez egy lekérdezés, amelyet az „employees_guru” táblán hajtanak végre az ORDER BY záradékkal és a Department-tel, mint ORDER BY oszlopnév definiálásával. A „Department” egy karakterlánc, így lexikográfiai sorrendben jeleníti meg az eredményeket.
  2. Ez a lekérdezés tényleges kimenete. Az eredmények a Osztály oszlop alapján jelennek meg, például ADMINISZTRÁCIÓ, Pénzügy stb., sorrendben.

Keresés:

SELECT * FROM employees_guru ORDER BY Department;

Csoportosítás lekérdezés szerint

A GROUP BY záradék Hive táblák oszlopait használja a csoportosításhoz.ping a GROUP BY által említett oszlopértékek, és a lekérdezés kiválasztja és megjeleníti az ezen értékek szerint csoportosított eredményeket.

Például az alábbi képernyőkép az egyes részlegekben dolgozó alkalmazottak teljes számát mutatja. Itt a „Részleg” szerepel a GROUP BY értékként.

GROUP BY lekérdezés, amely az egyes részlegek alkalmazottait számlálja

A fenti képernyőképből a következőket fogjuk megfigyelni:

  1. Ez a lekérdezés az „employees_guru” táblán kerül végrehajtásra a GROUP BY záradékkal és a Department értékkel, mint definiált GROUP BY oszlopnévvel.
  2. Az itt látható kimenet a részleg neve és az alkalmazottak száma a különböző részlegekben. Egy adott részleghez tartozó összes alkalmazott csoportosítva jelenik meg, így minden eredménysor egy részleg neve és az alkalmazottak teljes száma.

Keresés:

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

Sorrend

A SORT BY záradék a Hive táblák oszlopneveit vizsgálja a kimenet rendezéséhez. A DESC a csökkenő, az ASC pedig a növekvő sorrend szerinti rendezést teszi lehetővé.

A RENDEZÉS SZERINT (SORT BY) a sorokat a reduktorba való betáplálás előtt rendezi, így a rendezés az egyes reduktorokon belül garantált, nem pedig az egész eredményre vonatkozóan. A rendezés mindig az oszloptípustól függ.

Például, ha az oszloptípus numerikus, akkor numerikus sorrendben rendez, ha pedig karakterlánc, akkor lexikográfiai sorrendben.

Az alábbi képernyőkép a SORT BY lekérdezést mutatja be DESC használatával.

RENDEZÉS SZERINT lekérdezés az employees_guru függvényen, csökkenő sorrendben visszaadva az azonosítót

A fenti képernyőképből a következőket figyelhetjük meg:

  1. Ez egy lekérdezés, amelyet az „employees_guru” táblán hajtottak végre a SORT BY záradékkal és az „Id”-vel, mint SORT BY oszlopnév definiálásával. A DESC kulcsszót használtuk.
  2. Tehát a megjelenített kimenet „Id” csökkenő sorrendben van.

Keresés:

SELECT * from employees_guru SORT BY Id DESC;

Cluster By

A CLUSTER BY a HiveQL DISTRIBUTE BY és SORT BY záradékainak alternatívájaként használatos.

A CLUSTER BY záradékot a Hive-ban található táblákon használják. A Hive a CLUSTER BY oszlopait használja a sorok elosztására a reduktorok között, és a CLUSTER BY oszlopai több reduktorhoz kerülnek. Emellett biztosítja a több reduktorban található értékek rendezési sorrendjét is.

Például a CLUSTER BY záradék szerepel az employees_guru tábla Id oszlopnevében. A lekérdezés végrehajtása több reduktornak ad eredményt a háttérben, de az előtérben ez egy alternatív záradék mind a SORT BY, mind a DISTRIBUTE BY számára.

Ez a háttérfolyamat, amikor a MapReduce keretrendszer értelmében SORT BY, GROUP BY vagy CLUSTER BY lekérdezést hajtunk végre. Tehát, ha az eredményeket több reduktorban szeretnénk tárolni, akkor a CLUSTER BY-t választjuk.

A CLUSTER BY nyelvtan csak oszlopneveket fogad el, így az ASC és DESC nem csatolható hozzá; csökkenő eredményhez DISTRIBUTE BY szükséges külön SORT BY … DESC rendezéssel.

Az alábbi képernyőkép a CLUSTER BY lekérdezést mutatja az Id-n.

CLUSTER BY lekérdezés az employees_guru Id oszlopán

A fenti képernyőképből a következő megfigyeléseket kapjuk:

  1. Ez a lekérdezés hajtja végre a CLUSTER BY záradékot az Id mező értékén. Itt az Id értékek alapján fog rendezést végezni.
  2. Rendezett sorrendben jeleníti meg az employees_guruban található Id és Name értékeket.

Keresés:

SELECT  Id, Name from employees_guru CLUSTER BY Id;

Terjeszti

A DISTRIBUTE BY záradékot a Hive-ban található táblákon használjuk. A Hive a DISTRIBUTE BY oszlopait használja a sorok elosztására a reduktorok között, így az összes olyan sor, amely ugyanazzal a DISTRIBUTE BY oszlopértékkel rendelkezik, ugyanahhoz a reduktorhoz kerül.

  • Ez biztosítja, hogy az N reduktor mindegyike ne átfedje egymást.ping az oszlopértékek halmaza
  • Nem rendezi az egyes reduktorok kimenetét, és az egyező sorok egymás melletti helye nem garantált.

Az alábbi képernyőkép a DISTRIBUTE BY lekérdezést mutatja az Id.

DISTRIBUTE BY lekérdezés az employees_guru Id oszlopán

A fenti képernyőképből a következőket figyelhetjük meg:

  1. A DISTRIBUTE BY záradék az „employees_guru” tábla azonosítóján kerül végrehajtásra.
  2. A kimenet az Id és a Name értékeket mutatja. A háttérben az azonos azonosítójú sorok ugyanabba a reduktorba kerülnek.

Keresés:

SELECT  Id, Name from employees_guru DISTRIBUTE BY Id;

A négy tagmondat könnyen összekeverhető, ezért az alábbi táblázat összehasonlítja őket.

Kikötés Reduktorok Amit garantál
RENDEZÉS egy Teljes rendelés a teljes találatra vonatkozóan
RENDEZÉS Sok Csak az egyes reduktorokon belüli rendelés
FORGALMAZZA Sok Ugyanaz a kulcs ugyanahhoz a reduktorhoz ér el, rendezetlenül
Klaszterezés szerint Sok ELOSZTÁS SZERINT plusz RENDEZÉS SZERINT, növekvő

GYIK

Egyetlen reduktornak kell rendeznie minden sort, ami órákig futhat egy nagy táblán. LIMITÁLT korlátok, amik működnek. A hive.mapred.mode nonstrict értékre állítása teljesen eltávolítja a korlátozást.

Az ORDER BY függvény figyelmen kívül hagyja a beállítást, mert a teljes sorrend mindig egyetlen reduktorra omlik össze. A lekérdezés előtt állítsd be a mapreduce.job.reduces paramétert a darabszám rögzítéséhez, különben a Hive a bemeneti méret alapján becsüli meg.

Nem. A záradék csak oszlopneveket fogad el, és mindig növekvő sorrendben rendez. Írja be a DISTRIBUTE BY kifejezést a partíció oszlopába külön SORT BY DESC oszloppal; a két oszlop eltérő is lehet.

Rokonok, de nem azonosak. Vödrösítés A CLUSTER BY függvény a sorokat véglegesen, rögzített számú fájlban tárolja, míg a CLUSTER BY csak egyetlen lekérdezés időtartamára osztja el és rendezi a sorokat.

A gépi tanulási asszisztensek beolvassák az EXPLAIN tervet, és megjelölik az okokat, például a korlátlan ORDER BY-t, a hiányzó partíciós szűrőt vagy a ferde kulcsot. Minden javaslatot ellenőrzenek a tényleges futási környezettel szemben.

Egy rövid megjegyzésből jól megrajzolja ezeket a mintákat. Ellenőrizd a motorspecifikus dolgokat, mert könnyen beilleszthetőek. Spark SQL vagy Presto szintaxis, amelyet a Hive elutasít, például a DESC a CLUSTER BY után.

Egy Employees.txt nevű egyszerű szöveges fájl tartalmazza a hat oszlop értékét, és az első lekérdezés futtatása előtt betöltődik a táblázatba. Bármely elválasztott karakterekkel ellátott fájl, amely egyező oszlopokat tartalmaz, ugyanígy működik.

A szemantika azonos, mivel ezek HiveQL nyelvi funkciók, nem pedig motorfunkciók. Csak a fizikai terv változik – a motorok eltérően ütemezik a rendezési és keverési szakaszokat, így a futási idők változnak, míg az eredmények nem.

Foglald össze ezt a bejegyzést a következőképpen: