Изглед на кошер и индексиране: Създаване с примери
⚡ Умно обобщение
Изгледите в Hive са запазени заявки, които се държат като таблици само за четене, докато индексите са указатели към колона, които ускоряват търсенето, и двата вида се създават с кратки HiveQL оператори, показани тук.

Какво е изглед?
Изгледите (Views) са подобни на таблиците и се генерират въз основа на изискванията. Изгледът е чисто логически обект без собствено хранилище: Hive съхранява само текста на заявката в метахранилището и го оценява всеки път, когато се прави препратка към изгледа.
- Можем да запазим всякакви данни за набор от резултати като изглед в Hive
- Употребата е подобна на изгледите, използвани в SQL
- Изгледът е само за четене, така че не може да бъде цел на оператор LOAD, INSERT или ALTER, който записва данни.
Създаване на изглед:
Синтаксис:
Create VIEW <VIEWNAME> AS SELECT
Пълната документирана форма приема също клауза IF NOT EXISTS и опционален списък с колони, което е полезно, когато списъкът SELECT съдържа изрази, а не обикновени имена на колони.
Пример:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
В този пример създаваме изгледа Sample_View, който показва всички стойности на редове с поле за заплата, по-голямо от 25000. Филтърът се намира вътре в изгледа, така че всяка заявка, която избира от Sample_View, вижда само тези редове.
Какво е индекс?
Индексите са указатели към конкретно име на колона от таблица. Целта на индекса е да подобри скоростта на търсене: без такъв, заявка с предикат като КЪДЕТО tab1.col1 = 10 зарежда цялата таблица или дял и обработва всеки ред, докато индекс в col1 позволява на Hive да чете само част от файла.
- Потребителят трябва ръчно да дефинира индекса
- Където и да създаваме индекс, това означава, че създаваме указател към конкретно име на колона от таблицата.
- Всички промени, направени в колоната, присъстваща в таблицата, се съхраняват, като се използва индексната стойност, създадена за името на колоната.
Това ускорение не е безплатно. Изграждането на индекса изисква допълнителна обработка, а самият индекс заема дисково пространство, което трябва да се поддържа успоредно на таблицата.
Синтаксис:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Пример:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Тук създаваме индекс на таблицата guruhive_internaltable за името на колоната id. Обърнете внимание, че пълен оператор на версия, която все още поддържа индексиране, също се нуждае от клауза за обработка на индекси, която е показана изцяло в следващия раздел.
Разлика между изглед и индекс в Hive
Изгледите и индексите често се въвеждат заедно, защото и двата се намират върху съществуваща таблица, но решават различни проблеми. Изгледът променя това, което вижда заявката, докато индексът променя колко бързо Hive я намира. Таблицата по-долу ги сравнява.
| Аспект | Гледка | индекс |
|---|---|---|
| Какво съхранява | Само операторът SELECT в метахранилището | Отделна индексна таблица, съдържаща указатели към данните |
| Цел | Опростяване или ограничаване на това, което връща заявката | Намаляване на количеството данни, сканирани за даден предикат |
| Цена на диска | None | Допълнително място за съхранение плюс възстановяване след промени в данните |
| Достъп за запис | Само за четене | Не се запитва директно; оптимизаторът го използва |
| Актуално състояние | Напълно поддържан | Премахнато в Hive 3.0 |
На практика се създава изглед за четливост и контрол на достъпа, а индексът е създаден единствено за производителност върху селективна колона.
Видове индекси в Hive със синтаксис
Версиите до Hive 2.x предлагаха два манипулатора на индекси, а манипулаторът е посочен в задължителната клауза AS. Компактното индексиране се появи в Hive 0.7.0, а растерното индексиране - в Hive 0.8.0.
- Компактен индекс: съхранява стойността заедно с адреса на HDFS блока, който я съдържа, вместо да записва местоположението на всяко отделно събитие. Подходящо е за колони с много различни стойности.
- Индекс на растерна карта: съхранява растерно изображение за всяка отделна стойност, което е обичайният подход за колона само с малък брой различни стойности, като например флаг за състояние или пол.
Компактен индекс се създава, изброява и премахва, както следва:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Опцията WITH DEFERRED REBUILD регистрира индекса, без да го попълва, така че изграждането може да бъде планирано отделно с ALTER INDEX. Растерен индекс се създава по същия начин, с различно име на манипулатор:
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;
Индексът не се обновява автоматично. Всеки път, когато базовата таблица получи нови данни, ALTER INDEX … REBUILD трябва да се изпълни отново, а на разделена таблица възстановяването може да бъде ограничено до един дял.
Защо индексирането беше премахнато в Hive 3.0
Индексирането беше премахнато от Hive във версия 3.0 под HIVE-18448, така че CREATE INDEX, SHOW INDEX и DROP INDEX вече не съществуват в текущия клъстер. Функцията рядко си заслужаваше разходите за повторно изграждане, след като колонното съхранение и оптимизаторът, базиран на разходите, узряха. Три заместители покриват същата област.
- Материализирани изгледи: въведен в Hive 3.0.0, a материализиран изглед съхранява предварително изчисления резултат от заявка и оптимизаторът автоматично пренаписва входящите заявки спрямо него.
- Колонни файлови формати: ORC и Parquet имат свои собствени леки индекси и мин/макс статистика, така че четецът може да пропуска цели ивици, блокове или файлове без потребителски дефиниран индекс.
- Прегради и кофи: разделяне и групиране подрязване на данни на ниво директория и файл, което обикновено премахва много повече входни данни, отколкото индексът някога е правил.
В Hive 2.x индексът все още е валиден, но новата работа е по-добре обслужвана от една от горните опции.
