„Hive“ teikia „SQL“ tipo užklausų kalbą, skirtą ETL, Hadoop failų sistemos viršuje.
„Hive Query“ kalba („HiveQL“) suteikia „Hive“ SQL tipo aplinką darbui su lentelėmis, duomenų bazėmis, užklausomis.
Mes galime turėti kitokio tipo sąlygas, susijusias su „Hive“, kad atliktume įvairaus tipo duomenis ir užklausas. Geresniam ryšiui su įvairiais mazgais už aplinkos ribų. HIVE taip pat teikia JDBC ryšį.
Avilio užklausos teikia šias funkcijas:
- Duomenų modeliavimas, pvz., Duomenų bazių, lentelių kūrimas ir kt.
- ETL funkcijos, tokios kaip ištraukimas, transformavimas ir duomenų įkėlimas į lenteles
- Prisijungia prie skirtingų duomenų lentelių sujungimo
- Vartotojui pritaikyti scenarijai, kad būtų lengviau koduoti
- Greitesnis užklausų įrankis „Hadoop“ viršuje
Šiame straipsnyje sužinosite
- Rikiuoti pagal užklausą
- Grupuokite pagal užklausą
- Rūšiuoti pagal
- „Cluster By“
- Paskirstyti pagal
Lentelės kūrimas avilyje
Prieš pradėdami pagrindinę šios mokymo programos temą, pirmiausia sukursime lentelę, kurioje ji bus naudojama kaip nuorodos į šią pamoką.
Čia, šioje pamokoje, mes sukursime lentelę „darbuotojai_guru“ su 6 stulpeliais.
Iš aukščiau pateikto ekrano kadro
- Mes kuriame lentelę „darbuotojai_guru“ su 6 stulpelių reikšmėmis, tokiomis kaip Id, Vardas, Amžius, Adresas, Atlyginimas, Skyrius, kuri priklauso darbuotojams, esantiems organizacijoje „guru“.
- Šiame žingsnyje mes įkeliame duomenis į lentelę „darbuotojai_guru“. Duomenys, kuriuos ketiname įkelti, bus patalpinti faile Employees.txt
Rikiuoti pagal užklausą:
„HiveQL“ sintaksė „ORDER BY“ yra panaši į „ORDER BY“ sintaksę SQL kalboje.Pagal eiliškumą yra sąlyga, kurią naudojame su „SELECT“ sakiniu „Hive“ užklausose, o tai padeda rūšiuoti duomenis. Rikiuoti pagal sakinį naudokite „Hive“ lentelių stulpelius, jei norite rūšiuoti konkrečias stulpelių vertes, paminėtas „Order by“. Nepaisant to, kokį stulpelio pavadinimą mes išdėstome tvarka pagal sąlygą, užklausa parinks ir rodys rezultatus didėjančia ar mažėjančia tvarka tam tikrų stulpelių reikšmių.
Jei paminėta tvarka pagal lauką yra eilutė, tada rezultatas bus rodomas leksikografine tvarka. Galinėje dalyje jis turi būti perduotas vienam reduktoriui.
Iš ekrano nuotraukos „Viršuje“ galime stebėti šiuos dalykus
- Tai yra užklausa, kurią atliekama lentelėje „darbuotojai_guru“ su sąlyga „UŽSAKYTI“ su skyriumi, kaip apibrėžta stulpelio „UŽSAKYTI“.
„Departamentas“ yra styginis, todėl jame bus rodomi rezultatai, pagrįsti leksikografine tvarka.
- Tai yra faktinė užklausos išvestis. Jei tinkamai stebime, galime matyti, kad rezultatai bus rodomi remiantis Departamento stulpeliu, pvz., ADMIN, Finansai ir pan., Kad būtų galima atlikti orderQuery.
Užklausa:
SELECT * FROM employees_guru ORDER BY Department;
Grupuoti pagal užklausą:
Grupuokite pagal sakinį, naudodami „Hive“ lentelių stulpelius, grupuodami tam tikras stulpelių vertes, paminėtas pagal grupę. Kad ir kokiam stulpelio pavadinimui mes apibrėžtume sąlygą „groupby“, užklausa parinks ir rodys rezultatus grupuodama tam tikrų stulpelių reikšmes.
Pavyzdžiui, toliau pateiktoje ekrano kopijoje bus parodytas bendras kiekviename skyriuje dirbančių darbuotojų skaičius. Čia mes turime „Departamentą“ kaip grupę pagal vertę.
Iš pirmiau pateikto ekrano mes stebėsime šiuos dalykus
- Tai yra užklausa, atliekama lentelėje "darbuotojų_guru" su sąlyga GROUP BY su skyriumi, kaip apibrėžta stulpelio pavadinimu GROUP BY.
- Čia rodomas rezultatas yra skyriaus pavadinimas, o darbuotojai skaičiuojami skirtinguose skyriuose. Čia visi darbuotojai, priklausantys konkrečiam skyriui, yra sugrupuoti ir parodyti rezultatuose. Taigi rezultatas yra skyriaus pavadinimas, nurodant bendrą kiekviename skyriuje dirbančių darbuotojų skaičių.
Užklausa:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Rūšiuoti pagal:
Rūšiuoti pagal sakinį atlieka „Hive“ lentelių stulpelių pavadinimus, kad rūšiuotų išvestį. Galime paminėti DESC rūšiuojant užsakymą mažėjančia tvarka ir ASC - rūšiavimo didėjimo tvarka.
Tokiu būdu rūšiuoti eilutes prieš tiekiant į reduktorių. Visada rūšiuoti pagal stulpelių tipus.
Pvz., Jei stulpelių tipai yra skaitiniai, jie bus rūšiuojami eilės tvarka, jei stulpelių tipai yra eilutės, jie bus rūšiuojami leksikografine tvarka.
Iš aukščiau pateikto ekrano kadro galime stebėti:
- Tai yra užklausa, kuri lentelėje „darbuotojai_guru“ su sakiniu RūŠIUOTI su „id“ apibrėžia RŪŠIUOTI pagal stulpelio pavadinimą. Mes naudojome raktinį žodį DESC.
- Taigi išvestis bus rodoma mažėjančia „id“ tvarka.
Užklausa:
SELECT * from employees_guru SORT BY Id DESC;
Klasteris Autorius:
„Cluster By“ naudojama kaip alternatyva tiek „Distribute BY“, tiek „Rūšiuoti BY“ sąlygoms „Hive-QL“.
„Cluster BY“ sąlyga, naudojama „Hive“ esančiose lentelėse. „Hive“ naudoja „Cluster“ stulpelius, paskirstydamas eilutes tarp reduktorių. „Cluster BY“ stulpeliai pateks į kelis reduktorius.
- Tai užtikrina vertybių, esančių keliuose reduktoriuose, rūšiavimą
Pvz., „Cluster By“ sąlyga, nurodyta lentelės darbuotojų_guru lentelės stulpelyje „Id“. Išvestis vykdant šią užklausą duos rezultatus keliems reduktoriams galinėje dalyje. Bet kaip „front end“ yra alternatyvi sąlyga tiek rūšiavimui, tiek platinimui.
Tai iš tikrųjų yra „end end“ procesas, kai atliekame užklausą rūšiuodami pagal, grupuodami ir kaupdami grupes pagal žemėlapio sumažinimo sistemą. Taigi, jei norime išsaugoti rezultatus keliuose reduktoriuose, einame kartu su „Cluster By“.
Iš aukščiau pateikto ekrano kadro gauname šiuos pastebėjimus:
- Tai yra užklausa, atliekanti sąlygą „CLUSTER BY“ dėl lauko „Id“ vertės. Čia bus surūšiuotos Id vertės.
- Tai rodo ID ir vardus, esančius guru_employees, rūšiuojant pagal
Užklausa:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Platinti pagal:
Paskirstykite sąlygą, naudojamą lentelėse, esančiose avilyje. „Hive“ naudoja skiltis „Paskirstyti pagal“, kad paskirstytų eilutes tarp reduktorių. Visi „Distribute BY“ stulpeliai bus nukreipti į tą patį reduktorių.
- Tai užtikrina, kad kiekvienas iš N reduktorių gauna nepersidengiančius stulpelių diapazonus
- Tai nerūšiuoja kiekvieno reduktoriaus išvesties
Iš pirmiau pateiktos ekrano kopijos galime stebėti šiuos dalykus
- PASKIRSTYKITE TAISYKLĖ, vykdoma lentelės „empoloyees_guru“ ID
- Išvestyje rodomas ID, vardas. Galinėje dalyje jis eis į tą patį reduktorių
Užklausa:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;