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.

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ó.
A fenti képernyőképből
- 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.
- 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.
A fenti képernyőképből a következőket figyelhetjük meg:
- 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.
- 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.
A fenti képernyőképből a következőket fogjuk megfigyelni:
- 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.
- 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.
A fenti képernyőképből a következőket figyelhetjük meg:
- 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.
- 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.
A fenti képernyőképből a következő megfigyeléseket kapjuk:
- 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.
- 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.
A fenti képernyőképből a következőket figyelhetjük meg:
- A DISTRIBUTE BY záradék az „employees_guru” tábla azonosítóján kerül végrehajtásra.
- 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ő |






