Hive-näkymä ja indeksointi: Luo esimerkkien avulla
⚡ Älykäs yhteenveto
Hive-näkymät ovat tallennettuja kyselyitä, jotka toimivat kuin vain luku -taulukot, kun taas indeksit ovat osoittimia sarakkeeseen, jotka nopeuttavat hakuja. Molemmat luodaan tässä esitetyillä lyhyillä HiveQL-lauseilla.

Mikä on näkymä?
Näkymät ovat samanlaisia kuin taulukot, ja ne luodaan vaatimusten perusteella. Näkymä on puhtaasti looginen objekti, jolla ei ole omaa tallennustilaa: Hive säilyttää metastoressa vain kyselytekstin ja arvioi sen aina, kun näkymään viitataan.
- Voimme tallentaa minkä tahansa tulosjoukon tiedot näkymänä Hiveen
- Käyttö on samanlaista kuin näkymissä, joita käytetään SQL
- Näkymä on vain luku -tilassa, joten se ei voi olla LOAD-, INSERT- tai ALTER-käskyn kohde, joka kirjoittaa dataa.
Näkymän luominen:
Syntaksi:
Create VIEW <VIEWNAME> AS SELECT
Täysi dokumentoitu lomake hyväksyy myös IF NOT EXISTS -lauseen ja valinnaisen sarakeluettelon, mikä on hyödyllistä, kun SELECT-luettelo sisältää lausekkeita pelkkien sarakenimien sijaan.
Esimerkiksi:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Tässä esimerkissä luomme Sample_View-näkymän, joka näyttää kaikki riviarvot, joiden palkkakentän arvo on suurempi kuin 25000. Suodatin sijaitsee näkymän sisällä, joten kaikki Sample_View-näkymästä valitsevat kyselyt näkevät vain kyseiset rivit.
Mikä on indeksi?
Indeksit ovat osoittimia taulukon tiettyyn sarakenimeen. Indeksin tarkoituksena on parantaa hakunopeutta: ilman sitä kysely predikaatilla, kuten WHERE tab1.col1 = 10 lataa koko taulukon tai osion ja käsittelee jokaisen rivin, kun taas col1-indeksi antaa Hiven lukea vain osan tiedostosta.
- Käyttäjän on määritettävä indeksi manuaalisesti
- Aina kun luomme indeksin, se tarkoittaa, että luomme osoittimen taulukon tiettyyn sarakenimeen.
- Taulukossa olevaan sarakkeeseen tehdyt muutokset tallennetaan sarakkeen nimelle luodun indeksiarvon avulla.
Tuo nopeuden lisääminen ei ole ilmaista. Indeksin rakentaminen maksaa ylimääräistä prosessointia, ja itse indeksi vie levytilaa, jota on ylläpidettävä taulukon rinnalla.
Syntaksi:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Esimerkiksi:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Tässä luomme indeksin guruhive_internaltable-taululle sarakkeen nimellä id. Huomaa, että täydellinen lauseke julkaisussa, joka edelleen tukee indeksointia, tarvitsee myös indeksinkäsittelijälausekkeen, joka näytetään kokonaisuudessaan seuraavassa osiossa.
Ero näkymän ja indeksin välillä Hivessä
Näkymät ja indeksit esitellään usein yhdessä, koska molemmat sijaitsevat olemassa olevan taulukon päällä, mutta ne ratkaisevat eri ongelmia. Näkymä muuttaa sitä, mitä kysely näkee, kun taas indeksi muuttaa sitä, kuinka nopeasti Hive löytää sen. Alla oleva taulukko vertailee niitä.
| Aspect | Näytä | indeksi |
|---|---|---|
| Mitä se tallentaa | Vain SELECT-lauseke metastoressa | Erillinen indeksitaulukko, joka sisältää osoittimia dataan |
| Tarkoitus | Yksinkertaista tai rajaa kyselyn palauttamia tietoja | Vähennä predikaatin etsimiseksi skannattavan datan määrää |
| Levyn hinta | Ei eristetty | Lisätallennustilaa ja uudelleenrakentaminen tietojen muutosten jälkeen |
| Kirjoitusoikeus | Vain luku | Ei suoraan haettu; optimoija käyttää sitä |
| Nykyinen tila | Täysin tuettu | Poistettu Hive 3.0:ssa |
Käytännössä näkymä luodaan luettavuutta ja käyttöoikeuksien hallintaa varten, ja indeksi luotiin puhtaasti suorituskykyä varten valikoivalle sarakkeelle.
Hive-indeksien tyypit syntaksin avulla
Hive 2.x -versioon asti toimitettiin kaksi indeksinkäsittelijää, ja käsittelijä on nimetty pakollisessa AS-lausekkeessa. Tiivistetty indeksointi tuli Hive 0.7.0:aan ja bittikarttaindeksointi Hive 0.8.0:aan.
- Kompakti indeksi: tallentaa arvon yhdessä sitä sisältävän HDFS-lohkon osoitteen kanssa sen sijaan, että tallentaisi jokaisen yksittäisen esiintymän sijainnin. Se sopii sarakkeille, joissa on useita erillisiä arvoja.
- Bittikarttaindeksi: tallentaa bittikartan jokaista erillistä arvoa kohden, mikä on tavanomainen lähestymistapa sarakkeelle, jossa on vain pieni määrä erillisiä arvoja, kuten tila- tai sukupuolilippu.
Tiivistetty indeksi luodaan, listataan ja poistetaan seuraavasti:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
WITH DEFERRED REBUILD -vaihtoehto rekisteröi indeksin täyttämättä sitä, joten koonti voidaan ajoittaa erikseen ALTER INDEX -komennolla. Bittikarttaindeksi luodaan samalla tavalla, mutta eri käsittelijän nimellä:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
Indeksiä ei päivitetä automaattisesti. Aina kun perustaulukko vastaanottaa uutta tietoa, ALTER INDEX … REBUILD on suoritettava uudelleen, ja osioidussa taulukossa uudelleenrakennus voidaan rajoittaa yhteen osioon.
Miksi indeksointi poistettiin Hive 3.0:ssa
Indeksointi poistettiin Hive-versiosta 3.0 HIVE-18448-päivityksellä, joten CREATE INDEX-, SHOW INDEX- ja DROP INDEX -toimintoja ei enää ole nykyisessä klusterissa. Ominaisuus oli harvoin uudelleenrakennuskustannustensa arvoinen, kun saraketallennus ja kustannusperusteinen optimoija olivat kypsyneet. Kolme korvaavaa versiota kattavat saman aiheen.
- Toteutuneet näkemykset: esiteltiin Hive 3.0.0:ssa, a materialisoitunut näkymä tallentaa kyselyn esilasketun tuloksen ja optimoija kirjoittaa saapuvat kyselyt automaattisesti uudelleen sen pohjalta.
- Saraketiedostomuodot: ORC:llä ja Parquetilla on omat kevyet indeksit ja min/max-tilastot, joten lukija voi ohittaa kokonaisia raitoja, lohkoja tai tiedostoja ilman käyttäjän määrittämää indeksiä.
- Väliseinät ja kauhat: osiointi ja ryhmittely karsia tietoja hakemisto- ja tiedostotasolla, mikä yleensä poistaa paljon enemmän syötettä kuin indeksi koskaan teki.
Hive 2.x:ssä indeksi on edelleen kelvollinen, mutta uutta työtä varten on parempi käyttää jotakin yllä olevista vaihtoehdoista.
