Taru vaade ja indekseerimine: näidete abil loomine
⚡ Nutikas kokkuvõte
Hive'i vaated on salvestatud päringud, mis käituvad nagu kirjutuskaitstud tabelid, samas kui indeksid on viited veerule, mis kiirendavad otsinguid, ja mõlemad luuakse siin näidatud lühikeste HiveQL-lausetega.

Mis on vaade?
Vaated sarnanevad tabelitega ja need genereeritakse vastavalt nõuetele. Vaade on puhtloogiline objekt, millel pole omaette salvestusruumi: Hive hoiab metasalvestuses ainult päringuteksti ja hindab seda iga kord, kui vaatele viidatakse.
- Saame kõik tulemuskomplekti andmed Taru vaatena salvestada
- Kasutamine on sarnane vaadetega, mida kasutatakse jaotises SQL
- Vaade on kirjutuskaitstud, seega ei saa see olla andmete kirjutamiseks mõeldud LOAD-, INSERT- ega ALTER-lause sihtmärgiks.
Vaate loomine:
süntaksit:
Create VIEW <VIEWNAME> AS SELECT
Täielikult dokumenteeritud vorm aktsepteerib ka IF NOT EXISTS-klauslit ja valikulist veergude loendit, mis on kasulik, kui SELECT-loend sisaldab avaldisi, mitte tavalisi veerunimesid.
Näide:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
Selles näites loome vaate Sample_View, mis kuvab kõik rea väärtused, mille palgavälja väärtus on suurem kui 25000. Filter asub vaate sees, seega iga päring, mis valib Sample_View alt, näeb ainult neid ridu.
Mis on indeks?
Indeksid on osutid tabeli kindlale veerunimele. Indeksi eesmärk on otsingu kiiruse parandamine: ilma selleta ei toimi päring predikaadiga nagu KUS tab1.col1 = 10 laadib kogu tabeli või partitsiooni ja töötleb iga rida, samas kui indeks col1-s laseb Hive'il lugeda ainult osa failist.
- Kasutaja peab indeksi käsitsi määrama
- Kus iganes me indeksit loome, tähendab see, et loome pointeri tabeli konkreetsele veerunimele.
- Kõik tabelis olevas veerus tehtud muudatused salvestatakse veeru nimel loodud indeksiväärtuse abil.
See kiirendus pole tasuta. Indeksi loomine maksab lisatöötlust ja indeks ise võtab kettaruumi, mida tuleb tabeli kõrval hooldada.
süntaksit:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Näide:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Siin loome tabelile guruhive_internaltable indeksi veeru nimega id jaoks. Pane tähele, et täielik avaldus versioonis, mis ikka veel indekseerimist toetab, vajab ka indeksi käitleja klauslit, mida järgmises jaotises täielikult näidatakse.
Vaate ja indeksi erinevus tarus
Vaated ja indeksid tutvustatakse sageli koos, kuna mõlemad asuvad olemasoleva tabeli peal, kuid lahendavad erinevaid probleeme. Vaade muudab seda, mida päring näeb, samas kui indeks muudab seda, kui kiiresti Hive selle leiab. Allolev tabel võrdleb neid.
| Aspekt | vaade | indeks |
|---|---|---|
| Mida see salvestab | Ainult SELECT-lause metasalvestuses | Eraldi indeksitabel, mis sisaldab andmetele viitavaid viiteid |
| Eesmärk | Päringu tagastatava teabe lihtsustamine või piiramine | Predikaadi jaoks skannitavate andmete hulga vähendamine |
| Ketta maksumus | mitte ükski | Lisasalvestusruum ja andmete muutmise järgne taastamine |
| Kirjutamisõigus | Ainult lugemiseks | Ei päringut otse esitata; optimeerija kasutab seda |
| Praegune seis | Täielikult toetatud | Eemaldatud Hive 3.0-s |
Praktikas luuakse vaade loetavuse ja juurdepääsu kontrollimiseks ning indeks loodi üksnes valikulise veeru jõudluse tagamiseks.
Indeksitüübid tarus koos süntaksiga
Kuni Hive 2.x versioonideni oli kaasas kaks indeksihaldurit ja halduri nimi on märgitud kohustuslikus AS-klauslis. Kompaktne indekseerimine saabus Hive 0.7.0-s ja bitikaartide indekseerimine Hive 0.8.0-s.
- Kompaktne indeks: salvestab väärtuse koos seda sisaldava HDFS-ploki aadressiga, selle asemel, et salvestada iga üksiku esinemise asukohta. See sobib veergudele, millel on palju erinevaid väärtusi.
- Bitmap-indeks: salvestab bitikaardi iga erineva väärtuse kohta, mis on tavaline lähenemisviis veeru puhul, kus on ainult väike arv erinevaid väärtusi, näiteks staatuse või soo lipp.
Kompaktne indeks luuakse, loetletakse ja kustutatakse järgmiselt:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Valik WITH DEFERRED REBUILD registreerib indeksi seda täitmata, seega saab ehituse ajastada eraldi valikuga ALTER INDEX. Bitmap-indeks luuakse samamoodi, aga erineva käitleja nimega:
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;
Indeksit ei värskendata automaatselt. Iga kord, kui baastabel saab uusi andmeid, tuleb käsk ALTER INDEX … REBUILD uuesti käivitada ja partitsioonitud tabeli puhul saab ümberehituse piirata ühe partitsiooniga.
Miks indekseerimine Hive 3.0-s eemaldati?
Indekseerimine eemaldati Hive'ist versioonis 3.0 HIVE-18448 all, seega CREATE INDEX, SHOW INDEX ja DROP INDEX funktsioonid praeguses klastris enam ei eksisteeri. Pärast veergude süsteemi salvestusruumi ja kulupõhise optimeerija küpsemist ei olnud see funktsioon enam oma taastamiskulusid väärt. Kolm asendust katavad sama eesmärki.
- Materiaalsed vaated: kasutusele Hive 3.0.0-s, a materialiseerunud vaade salvestab päringu eelarvutatud tulemuse ja optimeerija kirjutab sissetulevad päringud selle põhjal automaatselt ümber.
- Veergude failivormingud: ORC-l ja Parquetil on oma kerged indeksid ja min/max statistika, nii et lugeja saab vahele jätta terveid triipe, plokke või faile ilma kasutaja määratletud indeksita.
- Vaheseinad ja ämbrid: jaotamine ja ämbritesse jagamine kärpib andmeid kataloogi- ja failitasandil, mis tavaliselt eemaldab palju rohkem sisendit kui indeks kunagi teinud on.
Hive 2.x-is on indeks endiselt kehtiv, kuid uue töö jaoks sobib paremini üks ülaltoodud valikutest.
