Изглед на кошер и индексиране: Създаване с примери

⚡ Умно обобщение

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

  • 👁️ Гледката е логична: Изгледът съхранява само своя SELECT оператор в метахранилището, така че не заема собствено дисково пространство.
  • 🔒 Само за четене по дизайн: Изгледът не може да бъде цел на LOAD, INSERT или ALTER, защото Hive го оценява наново при всяка заявка.
  • 📍 Индексни точки при данните: Индексът е указател към стойност на колона, който позволява на Hive да чете част от файл, вместо цялата таблица.
  • 🗂️ Двама обработчици: Компактното индексиране е подходящо за колони с висока кардиналност, а растерното индексиране е подходящо за колони с малко различни стойности.
  • 🔄 Ръчно възстановяване: Индексът никога не се обновява автоматично, така че ALTER INDEX REBUILD трябва да се изпълни след промяна в базовата таблица.
  • 🚫 Премахнато в Hive 3.0: Индексирането беше премахнато под HIVE-18448 и материализираните изгледи, ORC или Parquet съхранението и разделянето го заменят.

Изгледи и индекси в Hive, обяснени с примери

Какво е изглед?

Изгледите (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 индексът все още е валиден, но новата работа е по-добре обслужвана от една от горните опции.

Въпроси и Отговори

DROP VIEW view_name го премахва, а ALTER VIEW view_name RENAME TO new_name го преименува. Тъй като изгледът не съдържа данни, премахнетеping Човек никога не докосва базовата таблица; изчезва само записът в метахранилището.

Материализираният изглед съхранява предварително изчисления резултат от заявката като реални данни, така че изисква дисково пространство и преизграждане. Нормалният изглед съхранява само текста на заявката и се преизчислява при всяка препратка.

Не. Метахранилището запазва оператора SELECT и списъка с разрешените колони, нищо повече. Всяка препратка изпълнява отново основната заявка, поради което изгледът върху бавно съединение остава бавен.

В Hive 0.12.0 и по-ранни версии името беше чувствително към главни и малки букви за CREATE INDEX и DROP INDEX, докато ALTER INDEX изискваше малки букви. Hive 0.13.0 направи имената на индекси нечувствителни към главни и малки букви за всеки оператор.

Да, на всеки съвременен клъстер. Подрязването на дялове премахва цели директории преди началото на сканирането, а групирането стеснява обединението или извадката до конкретни файлове, което обикновено надминава това, което може да предостави една индексна таблица.

Инструментите за машинно обучение профилират регистрационните файлове на заявките, класират колоните с предикати по селективност и честота и предлагат къде би се изплатила материализирана схема за изглед или разделяне. Валидирайте всяко предложение спрямо план EXPLAIN, преди да го приложите.

Той надеждно генерира CREATE VIEW оператори от кратък коментар. Проверете всичко, специфично за версията, защото все още генерира CREATE INDEX синтаксис, който клъстер от Hive 3.0 или по-нова версия отхвърля директно.

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

Обобщете тази публикация с: