Taru päringute näited: järjestamine, rühmitamine ja Cluster By
⚡ Nutikas kokkuvõte
Hive'i päringud kasutavad ORDER BY, GROUP BY, SORT BY, CLUSTER BY ja DISTRIBUTE BY klausleid ridade sortimiseks, rühmitamiseks ja redutseerijate vahel jaotamiseks ning iga klauslit demonstreeritakse siin ühe töötajate näidistabeli abil.
Hive pakub lisaks ETL-i jaoks SQL-tüüpi päringukeelt hadoop failisüsteem.
Hive Query Language (HiveQL) pakub Hive'is SQL-tüüpi keskkonda tabelite, andmebaaside ja päringutega töötamiseks.
Hive'iga on seotud erinevat tüüpi klauslid erinevat tüüpi andmetega manipuleerimiseks ja päringute tegemiseks ning Hive pakub JDBC-ühenduvust paremate ühenduste loomiseks väljaspool keskkonda asuvate sõlmedega.
Hive'i päringud pakuvad järgmisi funktsioone:
- Andmete modelleerimine, näiteks andmebaaside, tabelite jms loomine.
- ETL-i funktsioonid, näiteks nttracandmete teisendamine, teisendamine ja tabelitesse laadimine
- Liita erinevate andmetabelite liitmiseks
- Kasutajapõhised kohandatud skriptid koodi hõlbustamiseks
- Kiirem päringutööriist Hadoopi peal
Tabeli loomine tarus
Enne selle õpetuse põhiteema juurde asumist loome kõigepealt tabeli, mida kasutada järgnevate osade viitamiseks.
Selles õpetuses loome kuue veeruga tabeli „employees_guru”, nagu allolev ekraanipilt näitab.
Ülaltoodud ekraanipildist
- Loome tabeli „employees_guru” kuue veeruväärtusega, näiteks ID, nimi, vanus, aadress, palk, osakond, mis kuuluvad organisatsioonis „guru” tegutsevatele töötajatele.
- Selles etapis laadime andmeid tabelisse employees_guru. Laaditavad andmed paigutatakse faili Employees.txt.
Telli päringu järgi
HiveQL-i ORDER BY süntaks on sarnane ORDER BY süntaksiga SQL keel.
ORDER BY on lause, mida me kasutame koos „SELECT” lausega Taru päringud andmete sortimiseks. See kasutab Hive'i tabelite veerge ORDER BY abil mainitud konkreetsete veergude väärtuste sortimiseks ja päring kuvab tulemused nende väärtuste kasvavas või kahanevas järjekorras.
Kui mainitud ORDER BY väli on string, kuvab see tulemuse leksikograafilises järjekorras. Tagaosas tuleb kogu tulemuste komplekt edastada ühele reduktorile.
See üks reduktor muudab ka ORDER BY kalliks suurel tabelil, seega ranges režiimis (hive.mapred.mode=strict) Hive lükkab tagasi ORDER BY käsu, millel puudub LIMIT-klausel.
Allolev ekraanipilt näitab ORDER BY päringut ja selle sorteeritud ridu.
Ülaltoodud ekraanipildilt näeme järgmist.
- See on päring, mis tehakse tabelile „employees_guru”, kus ORDER BY on klausel ja ORDER BY veerunimi on „Department”. „Department” on string, seega kuvab see tulemusi leksikograafilises järjekorras.
- See on päringu tegelik väljund. Tulemused kuvatakse osakonna veeru alusel, näiteks ADMIN, Finants jne, sellises järjekorras.
Päring:
SELECT * FROM employees_guru ORDER BY Department;
Rühmitage päringu järgi
GROUP BY klausel kasutab Hive'i tabelite veerge gruppide jaoksping GROUP BY abil mainitud konkreetsed veeruväärtused ning päring valib ja kuvab nende väärtuste järgi rühmitatud tulemused.
Näiteks allolev ekraanipilt näitab iga osakonna töötajate koguarvu. Siin on GROUP BY väärtuseks „Osakond”.
Ülaltoodud ekraanipildilt näeme järgmist:
- See on päring, mis teostatakse tabelis „employees_guru”, kasutades GROUP BY klauslit ja defineeritud GROUP BY veerunimeks Department.
- Siin kuvatav väljund on osakonna nimi ja töötajate arv erinevates osakondades. Kõik konkreetsesse osakonda kuuluvad töötajad on rühmitatud ja kuvatud, seega iga tulemuse rida on osakonna nimi koos töötajate koguarvuga.
Päring:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sorteeri
SORT BY klausel sorteerib Hive'i tabelite veerunimesid väljundi sorteerimiseks. DESC-i saab kasutada kahanevas järjekorras sortimiseks ja ASC-i kasvavas järjekorras sortimiseks.
SORT BY sorteerib read enne nende reduktorisse edastamist, nii et järjestus on garanteeritud iga reduktori sees, mitte kogu tulemuse ulatuses. Sorteerimine sõltub alati veeru tüübist.
Näiteks kui veeru tüüp on numbriline, sorteeritakse see numbrilises järjekorras ja kui veeru tüüp on string, sorteeritakse see leksikograafilises järjekorras.
Allolev ekraanipilt näitab SORT BY päringut, kasutades DESC-i.
Ülaltoodud ekraanipildist näeme järgmist:
- See on päring, mis teostatakse tabeli „employees_guru“ põhjal, kasutades SORT BY klauslit ja defineeritud SORT BY veeru nimeks „Id“. Me kasutasime märksõna DESC.
- Seega kuvatav väljund on kahanevas järjekorras "Id".
Päring:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY-d kasutatakse HiveQL-is alternatiivina nii DISTRIBUTE BY kui ka SORT BY klauslitele.
CLUSTER BY klauslit kasutatakse Hive'is olevate tabelite puhul. Hive kasutab CLUSTER BY veerge ridade jaotamiseks reduktorite vahel ning CLUSTER BY veerud lähevad mitmesse reduktorisse. See tagab ka nendes mitmes reduktoris olevate väärtuste sortimisjärjekorra.
Näiteks CLUSTER BY klausel on mainitud employees_guru tabeli Id veeru nimes. Selle päringu käivitamine annab tulemusi mitmele redutseerijale tagaserveris, kuid esiserveris on see alternatiivklausel nii SORT BY kui ka DISTRIBUTE BY jaoks.
See on taustprotsess, mida kasutatakse MapReduce'i raamistiku mõistes päringu teostamisel SORT BY, GROUP BY või CLUSTER BY abil. Seega, kui soovime tulemusi salvestada mitmesse reduktorisse, valime CLUSTER BY.
CLUSTER BY grammatika aktsepteerib ainult veerunimesid, seega ei saa sellele lisada ASC-d ja DESC-d; laskuva tulemuse saamiseks on vaja DISTRIBUTE BY-d koos eraldi SORT BY … DESC-ga.
Allolev ekraanipilt näitab CLUSTER BY päringut ID-l.
Ülaltoodud ekraanipildist saame järgmised tähelepanekud:
- See on päring, mis täidab Id välja väärtusel CLUSTER BY klausli. Siin sorteeritakse Id väärtused.
- See kuvab employees_guru's olevad Id ja Name väärtused sorteeritud järjekorras.
Päring:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Levitab
DISTRIBUTE BY klauslit kasutatakse Hive'is olevate tabelite puhul. Hive kasutab DISTRIBUTE BY veerge ridade jaotamiseks reduktorite vahel, nii et kõik read, millel on sama DISTRIBUTE BY veeru väärtus, lähevad samasse reduktorisse.
- See tagab, et iga N reduktorit saab kattuvuse puudumiseping veeru väärtuste komplekt
- See ei sorteeri iga reduktori väljundit ja ei ole garanteeritud, et vastavad read asuvad üksteise kõrval.
Allolev ekraanipilt näitab ID-l põhinevat päringut DISTRIBUTE BY.
Ülaltoodud ekraanipildilt näeme järgmist.
- DISTRIBUTE BY klausel täidetakse tabeli „employees_guru” ID-l.
- Väljund näitab ID-d ja nime. Tagaosas lähevad sama ID-ga read samasse reduktorisse.
Päring:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Neid nelja klauslit on lihtne segi ajada, seega on allolev tabel neid võrdlenud.
| Klausel | Reduktorid | Mida see garanteerib |
|---|---|---|
| TELLI | Üks | Kogu tulemuse tellimus |
| SORTEERIMA | Palju | Tellimine ainult iga reduktori sees |
| LEVITAB | Palju | Sama võti jõuab sama reduktorini, sortimata kujul |
| KLASTRI JÄRGI | Palju | JAOTA pluss SORTI JÄRGI, kasvavalt |







