Вид куща та індексування: створення за допомогою прикладів
⚡ Розумний підсумок
Представлення в Hive – це збережені запити, які поводяться як таблиці лише для читання, тоді як індекси – це вказівники на стовпець, що пришвидшують пошук, і обидва створюються за допомогою коротких операторів HiveQL, показаних тут.

Що таке перегляд?
Представлення схожі на таблиці та генеруються на основі вимог. Представлення — це суто логічний об'єкт без власного сховища: 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 його знаходить. У таблиці нижче їх порівнюють.
| Аспект | вид | індекс |
|---|---|---|
| Що воно зберігає | Тільки оператор SELECT у метасховищі | Окрема індексна таблиця, що містить вказівники на дані |
| Мета | Спрощення або обмеження результатів, які повертає запит | Зменшити обсяг даних, що скануються для предиката |
| Вартість диска | ніхто | Додаткове сховище плюс перебудова після зміни даних |
| Доступ для запису | Тільки для читання | Не запитується безпосередньо; оптимізатор використовує його |
| Поточний статус | Повністю підтримується | Видалено у 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 мають власні легкі індекси та статистику min/max, тому зчитувач може пропускати цілі смуги, блоки або файли без будь-якого визначеного користувачем індексу.
- Перегородки та відра: розділення та сегментування обрізати дані на рівні каталогів та файлів, що зазвичай видаляє набагато більше вхідних даних, ніж будь-коли робив індекс.
У Hive 2.x індекс все ще дійсний, але для нової роботи краще використовувати один із наведених вище варіантів.
