Przykłady zapytań Hive: Sortuj według, Grupuj według i Cluster By
⚡ Inteligentne podsumowanie
Zapytania Hive korzystają z klauzul ORDER BY, GROUP BY, SORT BY, CLUSTER BY i DISTRIBUTE BY, aby sortować, grupować i rozprzestrzeniać wiersze w reduktorach. Każda klauzula jest zaprezentowana tutaj na przykładzie pojedynczej tabeli employees.

Hive udostępnia język zapytań typu SQL do celów ETL na bazie Hadoop system plików.
Hive Query Language (HiveQL) zapewnia środowisko typu SQL w Hive do pracy z tabelami, bazami danych i zapytaniami.
Z Hive powiązane są różne typy klauzul umożliwiające wykonywanie różnych typów manipulacji danymi i zapytań. Ponadto Hive zapewnia łączność JDBC w celu uzyskania lepszych połączeń z węzłami spoza środowiska.
Zapytania Hive zapewniają następujące funkcje:
- Modelowanie danych, np. tworzenie baz danych, tabel itp.
- Funkcjonalności ETL, takie jak np.traccja, transformacja i ładowanie danych do tabel
- Łączy do łączenia różnych tabel danych
- Skrypty niestandardowe dostosowane do potrzeb użytkownika ułatwiające kodowanie
- Szybsze narzędzie do wysyłania zapytań na platformie Hadoop
Tworzenie tabeli w ulu
Zanim przejdziemy do głównego tematu tego samouczka, utworzymy tabelę, która będzie stanowić punkt odniesienia dla kolejnych sekcji.
W tym samouczku utworzymy tabelę „employees_guru” z 6 kolumnami, jak pokazano na zrzucie ekranu poniżej.
Z powyższego zrzutu ekranu wynika,
- Tworzymy tabelę „employees_guru” z wartościami 6 kolumn, takimi jak ID, Imię i nazwisko, Wiek, Adres, Wynagrodzenie, Dział, które należą do pracowników obecnych w organizacji „guru”.
- W tym kroku ładujemy dane do tabeli employees_guru. Dane, które zamierzamy załadować, znajdują się w pliku Employees.txt.
Zamów według zapytania
Składnia komendy ORDER BY w HiveQL jest podobna do składni komendy ORDER BY w SQL język.
ORDER BY to klauzula, której używamy z poleceniem „SELECT” w Zapytania dotyczące ula Sortowanie danych. Używa kolumn w tabelach Hive do sortowania wartości określonych kolumn, o których mowa w klauzuli ORDER BY, a zapytanie wyświetla wyniki w kolejności rosnącej lub malejącej według tych wartości.
Jeśli wspomniane pole ORDER BY jest ciągiem znaków, wynik jest wyświetlany w kolejności leksykograficznej. W końcowym efekcie cały zestaw wyników musi zostać przekazany do jednego reduktora.
Ten pojedynczy reduktor sprawia również, że ORDER BY jest kosztowny w przypadku dużej tabeli, więc w trybie ścisłym (hive.mapred.mode=strict) Hive odrzuca instrukcję ORDER BY, która nie zawiera klauzuli LIMIT.
Poniższy zrzut ekranu przedstawia zapytanie ORDER BY i jego posortowane wiersze.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:
- Jest to zapytanie wykonane na tabeli „employees_guru” z klauzulą ORDER BY i nazwą kolumny „Department” zdefiniowaną w klauzuli ORDER BY. „Department” to ciąg znaków, więc wyniki są wyświetlane w kolejności leksykograficznej.
- To jest rzeczywisty wynik zapytania. Wyniki są wyświetlane w kolejności odpowiadającej kolumnie Dział, takiej jak ADMIN, Finanse itd.
zapytanie:
SELECT * FROM employees_guru ORDER BY Department;
Grupuj według zapytania
Klauzula GROUP BY używa kolumn w tabelach Hive do grupowaniaping konkretne wartości kolumn wymienione za pomocą GROUP BY, a zapytanie wybiera i wyświetla wyniki pogrupowane według tych wartości.
Na przykład poniższy zrzut ekranu przedstawia całkowitą liczbę pracowników obecnych w każdym dziale. Tutaj wartość „Dział” jest ustawiona w opcji GROUP BY.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:
- Jest to zapytanie wykonywane w tabeli „employees_guru” z klauzulą GROUP BY i nazwą kolumny GROUP BY „Department”.
- Wyświetlany tutaj wynik to nazwa działu i liczba pracowników w poszczególnych działach. Wszyscy pracownicy należący do danego działu są zgrupowani i wyświetlani, więc każdy wiersz wyników zawiera nazwę działu wraz z całkowitą liczbą pracowników.
zapytanie:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Sortuj według
Klauzula SORT BY jest wykonywana na nazwach kolumn tabel Hive w celu posortowania danych wyjściowych. Możemy użyć klauzuli DESC do sortowania w kolejności malejącej i klauzuli ASC do sortowania w kolejności rosnącej.
Funkcja SORT BY sortuje wiersze przed przekazaniem ich do reduktora, dzięki czemu kolejność jest gwarantowana w obrębie każdego reduktora, a nie w całym wyniku. Sortowanie zawsze zależy od typu kolumny.
Na przykład, jeśli typ kolumny jest numeryczny, sortowanie odbywa się w kolejności numerycznej, a jeśli typ kolumny jest ciągiem znaków, sortowanie odbywa się w kolejności leksykograficznej.
Poniższy zrzut ekranu przedstawia zapytanie SORT BY przy użyciu DESC.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:
- Jest to zapytanie wykonane na tabeli „employees_guru” z klauzulą SORT BY i „Id” jako zdefiniowaną nazwą kolumny SORT BY. Użyliśmy słowa kluczowego DESC.
- Wyświetlane dane wyjściowe są zatem uporządkowane malejąco według „Id”.
zapytanie:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
CLUSTER BY jest używany jako alternatywa dla klauzul DISTRIBUTE BY i SORT BY w HiveQL.
Klauzula CLUSTER BY jest używana w tabelach obecnych w Hive. Hive używa kolumn w CLUSTER BY do dystrybucji wierszy pomiędzy reduktorami, a kolumny CLUSTER BY odnoszą się do wielu reduktorów. Zapewnia również kolejność sortowania wartości obecnych w tych wielu reduktorach.
Na przykład klauzula CLUSTER BY jest wymieniona w nazwie kolumny Id tabeli employees_guru. Wykonanie tego zapytania zwraca wyniki dla wielu reduktorów w zapleczu, ale w interfejsie jest to klauzula alternatywna dla SORT BY i DISTRIBUTE BY.
To proces zaplecza, gdy wykonujemy zapytanie z użyciem SORT BY, GROUP BY lub CLUSTER BY w kontekście frameworka MapReduce. Jeśli więc chcemy przechowywać wyniki w wielu reduktorach, używamy CLUSTER BY.
Gramatyka CLUSTER BY akceptuje tylko nazwy kolumn, dlatego nie można do niej dołączać instrukcji ASC ani DESC. Wynik w kolejności malejącej wymaga instrukcji DISTRIBUTE BY z oddzielnym poleceniem SORT BY … DESC.
Zrzut ekranu poniżej przedstawia zapytanie CLUSTER BY dla identyfikatora.
Z powyższego zrzutu ekranu wynikają następujące wnioski:
- To zapytanie wykonuje klauzulę CLUSTER BY na wartości pola Id. W tym przypadku nastąpi sortowanie według wartości Id.
- Wyświetla wartości Id i Name obecne w employees_guru w kolejności posortowanej.
zapytanie:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Rozpowszechniaj przez
Klauzula DISTRIBUTE BY jest używana w tabelach obecnych w Hive. Hive używa kolumn w DISTRIBUTE BY do dystrybucji wierszy między reduktorami, więc wszystkie wiersze, które mają tę samą wartość w kolumnie DISTRIBUTE BY, trafiają do tego samego reduktora.
- Zapewnia, że każdy z reduktorów N otrzymuje sygnał bez nakładania sięping zestaw wartości kolumn
- Nie sortuje wyników każdego reduktora i nie ma gwarancji, że pasujące wiersze będą znajdować się obok siebie
Zrzut ekranu poniżej przedstawia zapytanie DISTRIBUTE BY dla identyfikatora.
Na powyższym zrzucie ekranu możemy zaobserwować następujące rzeczy:
- Klauzula DISTRIBUTE BY jest wykonywana na identyfikatorze tabeli „employees_guru”.
- Na wyjściu wyświetlane są identyfikatory i nazwy. W tle wiersze o tym samym identyfikatorze trafiają do tego samego reduktora.
zapytanie:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Łatwo pomylić te cztery zdania, dlatego poniższa tabela je porównuje.
| Klauzula | Reduktory | Co gwarantuje |
|---|---|---|
| ZAMÓW PRZEZ | jeden | Całkowite zamówienie w całym wyniku |
| SORTUJ WEDŁUG | Wiele | Zamówienia można składać tylko w ramach danego reduktora |
| DYSTRYBUOWANE PRZEZ | Wiele | Ten sam klucz dociera do tego samego reduktora, niesortowany |
| ZGRUPUJ WEDŁUG | Wiele | ROZDZIEL WEDŁUG plus SORTUJ WEDŁUG, rosnąco |






