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.

  • 👁️ Näkökulma on looginen: Näkymä tallentaa metastoreen vain SELECT-lausekkeensa, joten se ei vie omaa levytilaa.
  • 🔒 Vain luku -tilassa suunnittelun mukaan: Näkymä ei voi olla LOAD-, INSERT- tai ALTER-komentojen kohde, koska Hive arvioi sen uudelleen jokaisella kyselyllä.
  • 📍 Indeksipisteet tiedoissa: Indeksi on osoitin sarakkeen arvoon, jonka avulla Hive voi lukea osan tiedostosta koko taulukon sijaan.
  • 🗂️ Kaksi käsittelijää: Kompakti indeksointi sopii korkeakardinaliteettisille sarakkeille ja bittikarttaindeksointi sarakkeille, joissa on vähän erillisiä arvoja.
  • 🔄 Manuaalinen uudelleenrakentaminen: Indeksiä ei koskaan päivitetä automaattisesti, joten ALTER INDEX REBUILD on suoritettava perustaulukon muutosten jälkeen.
  • 🚫 Poistettu Hive 3.0:ssa: Indeksointi poistettiin HIVE-18448:sta, ja sen korvasivat materialisoidut näkymät, ORC- tai Parquet-tallennustila ja osiointi.

Näkymät ja indeksit Hivessä selitettynä esimerkein

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.

UKK

DROP VIEW view_name poistaa sen, ja ALTER VIEW view_name RENAME TO new_name nimeää sen uudelleen. Koska näkymä ei sisällä tietoja, pudotaping perustaulukkoon ei koskaan kosketa; vain metastore-merkintä katoaa.

Materialisoitu näkymä tallentaa esilasketun kyselytuloksen todellisena datana, joten se vie levytilaa ja vaatii UUDELLEENRAKENTAMISEN. Normaali näkymä tallentaa vain kyselytekstin ja lasketaan uudelleen jokaisen viittauksen yhteydessä.

Ei. Metastore säilyttää SELECT-lausekkeen ja ratkaistun sarakeluettelon, ei mitään muuta. Jokainen viittaus suorittaa pohjana olevan kyselyn uudelleen, minkä vuoksi näkymä hitaan liitoksen yli pysyy hitaana.

Hive 0.12.0:ssa ja aiemmissa versioissa CREATE INDEX- ja DROP INDEX -funktioiden nimet erottelivat kirjainkoon, kun taas ALTER INDEX -funktioiden nimet pitivät käyttää pieniä kirjaimia. Hive 0.13.0:ssa indeksien nimet erottelivat kirjainkoon kaikissa lausekkeissa.

Kyllä kaikissa moderneissa klustereissa. Osioiden karsinta poistaa kokonaisia ​​hakemistoja ennen skannauksen alkamista ja ryhmittely rajaa liitoksen tai näytteen tiettyihin tiedostoihin, mikä yleensä ylittää indeksitaulukon tuottaman tuloksen.

Koneoppimistyökalut profiloivat kyselylokeja, luokittelevat predikaattisarakkeet valikoivuuden ja esiintymistiheyden perusteella ja ehdottavat, missä kohtaa materialisoitu näkymä tai osiomalli kannattaisi. Vahvista jokainen ehdotus EXPLAIN-suunnitelmaa vasten ennen sen soveltamista.

Se tuottaa CREATE VIEW -lausekkeita luotettavasti lyhyestä kommentista. Tarkista kaikki versiokohtaiset tiedot, koska se tuottaa edelleen CREATE INDEX -syntaksia, jonka Hive 3.0 tai uudempi klusteri hylkää suoraan.

Indeksi on erillinen osoitintaulukko, eikä Hive koskaan päivitä sitä perustaulukon muuttuessa. Ilman uudelleenrakennusta osoittimet vanhenevat, joten optimoija joko ohittaa indeksin tai palauttaa vanhentuneet osumat.

Tiivistä tämä viesti seuraavasti: