Вид куща та індексування: створення за допомогою прикладів

⚡ Розумний підсумок

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

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

Пояснення представлень та індексів у Hive з прикладами

Що таке перегляд?

Представлення схожі на таблиці та генеруються на основі вимог. Представлення — це суто логічний об'єкт без власного сховища: 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 індекс все ще дійсний, але для нової роботи краще використовувати один із наведених вище варіантів.

Поширені запитання

Команда 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 ніколи не оновлює її, коли базова таблиця змінюється. Без перебудови вказівники застарівають, тому оптимізатор або пропускає індекс, або повертає застарілі збіги.

Підсумуйте цей пост за допомогою: