Widok Hive i indeksowanie: tworzenie z przykładami
⚡ Inteligentne podsumowanie
Widoki w Hive to zapisane zapytania, które zachowują się jak tabele tylko do odczytu, natomiast indeksy to wskaźniki do kolumn, które przyspieszają wyszukiwanie. Oba typy widoków tworzy się za pomocą krótkich poleceń HiveQL pokazanych tutaj.

Co to jest widok?
Widoki są podobne do tabel i są generowane na podstawie wymagań. Widok to obiekt czysto logiczny, nieposiadający własnej pamięci masowej: Hive przechowuje w metamagazynie tylko tekst zapytania i analizuje go przy każdym odwołaniu do widoku.
- Możemy zapisać dowolne dane zestawu wyników jako widok w Hive
- Użycie jest podobne do widoków używanych w SQL
- Widok jest tylko do odczytu, więc nie może być celem instrukcji LOAD, INSERT lub ALTER zapisujących dane
Tworzenie widoku:
Składnia:
Create VIEW <VIEWNAME> AS SELECT
Pełna udokumentowana forma akceptuje również klauzulę IF NOT EXISTS i opcjonalną listę kolumn, co jest przydatne, gdy lista SELECT zawiera wyrażenia, a nie zwykłe nazwy kolumn.
Przykład:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
W tym przykładzie tworzymy widok Sample_View, który wyświetla wszystkie wartości wierszy zawierające pole wynagrodzenia większe niż 25 000. Filtr znajduje się wewnątrz widoku, więc każde zapytanie wybierające z widoku Sample_View będzie widzieć tylko te wiersze.
Co to jest Indeks?
Indeksy to wskaźniki do konkretnej nazwy kolumny w tabeli. Celem indeksu jest przyspieszenie wyszukiwania: bez niego zapytanie z predykatem, takim jak GDZIE tab1.col1 = 10 ładuje całą tabelę lub partycję i przetwarza każdy wiersz, podczas gdy indeks w kolumnie col1 pozwala Hive odczytać tylko część pliku.
- Użytkownik musi ręcznie zdefiniować indeks
- Gdziekolwiek tworzymy indeks, oznacza to, że tworzymy wskaźnik do nazwy określonej kolumny tabeli
- Wszelkie zmiany wprowadzone w kolumnie znajdującej się w tabeli są przechowywane przy użyciu wartości indeksu utworzonej na podstawie nazwy kolumny
To przyspieszenie nie jest darmowe. Budowanie indeksu wymaga dodatkowego przetwarzania, a sam indeks zajmuje miejsce na dysku, które trzeba utrzymywać obok tabeli.
Składnia:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
Przykład:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
Tutaj tworzymy indeks w tabeli guruhive_internaltable dla nazwy kolumny id. Należy pamiętać, że kompletne polecenie w wersji, która nadal obsługuje indeksowanie, wymaga również klauzuli obsługi indeksu, którą w pełnej wersji przedstawiono w następnej sekcji.
Różnica między widokiem a indeksem w Hive
Widoki i indeksy są często stosowane razem, ponieważ oba znajdują się na istniejącej tabeli, ale rozwiązują różne problemy. Widok zmienia to, co widzi zapytanie, podczas gdy indeks zmienia szybkość, z jaką Hive je znajduje. Poniższa tabela je porównuje.
| WYGLĄD | Zobacz | wskaźnik |
|---|---|---|
| Co przechowuje | Tylko polecenie SELECT w metamagazynie | Osobna tabela indeksów zawierająca wskaźniki do danych |
| Cel | Uprość lub ogranicz wyniki zapytania | Zmniejsz ilość danych skanowanych w celu znalezienia predykatu |
| Koszt dysku | żaden | Dodatkowa pamięć masowa i możliwość odbudowy po zmianie danych |
| Dostęp do zapisu | Tylko do odczytu | Nie jest bezpośrednio kwerendowane; optymalizator z niego korzysta |
| Aktualny status | W pełni obsługiwane | Usunięto w Hive 3.0 |
W praktyce widok tworzony jest ze względu na czytelność i kontrolę dostępu, a indeks tworzony jest wyłącznie w celu zapewnienia wydajności dla wybranej kolumny.
Typy indeksów w Hive ze składnią
Wersje do Hive 2.x zawierały dwa moduły obsługi indeksów, a moduł obsługi indeksów był nazwany w obowiązkowej klauzuli AS. Indeksowanie kompaktowe pojawiło się w Hive 0.7.0, a indeksowanie bitmapowe w Hive 0.8.0.
- Indeks kompaktowy: Przechowuje wartość wraz z adresem bloku HDFS, który ją przechowuje, zamiast rejestrować lokalizację każdego wystąpienia. Nadaje się do kolumn z wieloma różnymi wartościami.
- Indeks mapy bitowej: przechowuje mapę bitową dla każdej odrębnej wartości, co jest typowym podejściem w przypadku kolumny zawierającej niewielką liczbę odrębnych wartości, np. flagę statusu lub płci.
Kompaktowy indeks tworzy się, umieszcza na liście i usuwa w następujący sposób:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
Opcja WITH DEFERRED REBUILD rejestruje indeks bez jego wypełniania, dzięki czemu kompilację można zaplanować osobno za pomocą ALTER INDEX. Indeks bitmapowy jest tworzony w ten sam sposób, z inną nazwą procedury obsługi:
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;
Indeks nie jest odświeżany automatycznie. Za każdym razem, gdy tabela bazowa otrzymuje nowe dane, konieczne jest ponowne uruchomienie instrukcji ALTER INDEX … REBUILD, a w przypadku tabeli partycjonowanej odbudowa może być ograniczona do pojedynczej partycji.
Dlaczego indeksowanie zostało usunięte w Hive 3.0
Indeksowanie zostało usunięte z Hive w wersji 3.0 zgodnie z dyrektywą HIVE-18448, więc polecenia CREATE INDEX, SHOW INDEX i DROP INDEX nie są już dostępne w obecnym klastrze. Funkcja ta rzadko była warta swojej ceny, gdy dojrzał już system pamięci kolumnowej i optymalizator oparty na kosztach. Trzy zamienniki obejmują ten sam obszar.
- Widoki zmaterializowane: wprowadzono w Hive 3.0.0, zmaterializowany widok przechowuje wstępnie obliczony wynik zapytania, a optymalizator automatycznie przepisuje przychodzące zapytania.
- Formaty plików kolumnowych: ORC i Parquet mają własne lekkie indeksy i statystyki min/max, dzięki czemu czytelnik może pominąć całe paski, bloki lub pliki bez konieczności definiowania indeksu przez użytkownika.
- Partycje i zasobniki: partycjonowanie i grupowanie oczyszczanie danych na poziomie katalogów i plików, co zwykle powoduje usunięcie o wiele większej ilości danych wejściowych niż miałoby to miejsce w przypadku indeksu.
W przypadku Hive 2.x indeks nadal jest ważny, ale do nowych prac lepiej nadaje się jedna z opcji powyżej.
