Typy danych Hive: jak tworzyć i upuszczać bazy danych w Hive
⚡ Inteligentne podsumowanie
Typy danych Hive definiują dane, które może zawierać każda kolumna tabeli, a polecenia CREATE DATABASE i DROP DATABASE konfigurują lub usuwają przestrzeń nazw, w której znajdują się te tabele w metadanych Hive.
Typy danych są bardzo ważnymi elementami języka zapytań Hive i modelowania danych. Aby zdefiniować typy kolumn tabeli, musimy znać typy danych i ich zastosowanie.
Poniżej znajduje się krótki przegląd niektórych typów danych dostępnych w Hive:
- Typy numeryczne
- Typy ciągów
- Typy daty/godziny
- Typy złożone
Typy danych w Hive
Każda kolumna Hive jest deklarowana za pomocą jednego z poniższych typów. Najpierw pojawiają się rodziny prymitywne, a następnie typy złożone, które przechowują więcej niż jedną wartość w jednej kolumnie.
Numeryczne typy danych Hive
Kolumny numeryczne mają długość od jednego do ośmiu bajtów, więc wybranie najmniejszego typu, który pasuje do wartości, pozwala ograniczyć koszty przechowywania i skanowania.
| Typ | Przydział pamięci |
|---|---|
| MAŁYINT | 1-bajtowa liczba całkowita ze znakiem (-128 do 127) |
| MAŁE | 2-bajtowa liczba całkowita ze znakiem (-32,768 do 32,767) |
| INT | 4-bajtowa liczba całkowita ze znakiem (-2,147,483,648 do 2,147,483,647) |
| DUŻE | 8-bajtowa liczba całkowita ze znakiem (-9,223,372,036,854,775,808 do 9,223,372,036,854,775,807) |
| FLOAT | 4-bajtowa liczba zmiennoprzecinkowa pojedynczej precyzji |
| PODWÓJNIE | 8-bajtowa liczba zmiennoprzecinkowa podwójnej precyzji |
| DZIESIĘTNY | W tym typie precyzję i skalę możemy zdefiniować jako DECIMAL(precyzja, skala). Jeśli zostaną one pominięte, Hive używa DECIMAL(10,0). |
Typy danych ciągu Hive
Kolumny znaków występują w trzech kształtach, a różnica polega na tym, czy Hive wymusza określoną długość.
| Typ | Długość |
|---|---|
| ZWĘGLAĆ | Stała długość, do 255 znaków. Krótsze wartości są uzupełniane spacjami. |
| VARCHAR | Od 1 do 65 535 znaków. Dłuższa wartość jest automatycznie obcinana. |
| STRING | Tutaj możemy zdefiniować długość (bez ograniczeń) |
Typy danych daty/godziny Hive
Kolumny czasowe są przechowywane bez przesunięcia strefy czasowej, o czym warto pamiętać przed porównaniem wartości zapisanych przez różne klastry.
| Typ | Stosowanie |
|---|---|
| Sygnatura czasu | Obsługuje tradycyjne Unix znacznik czasu z opcjonalną precyzją nanosekundową |
| Data | Format danych to RRRR-MM-DD. Zakres wartości obsługiwanych dla typu Data wynosi od 0000-01-01 do 9999-12-31, w zależności od obsługi przez prymityw Java typowa data |
Różne typy danych Hive
Dwa kolejne prymitywy znajdują się poza rodzinami liczb, ciągów znaków i dat, ale regularnie pojawiają się w rzeczywistych schematach.
| Typ | Stosowanie |
|---|---|
| BOOLEAN | Przechowuje prawdę lub fałsz |
| BINARY | Przechowuje tablicę bajtów, co pozwala na zachowanie surowej zawartości poza kolumną STRING |
Typy danych złożonych Hive
Typy złożone zagnieżdżają wartości w jednej kolumnie, co eliminuje dodatkowe połączenia, które byłyby wymagane w przypadku projektów relacyjnych.
| Typ | Stosowanie |
|---|---|
| Tablice | SZYK Wartości ujemne i wyrażenia inne niż stałe są niedozwolone |
| Mapy | MAPA Wartości ujemne i wyrażenia inne niż stałe są niedozwolone |
| Struktury | STRUKTURA |
| Unia | UNIONTYPE |
Przykład złożonych typów danych Hive
Powyższa tabela przedstawia formę deklaracji. Poniższe polecenie umieszcza trzy typy złożone w jednej tabeli, dzięki czemu klauzule rozdzielające i składnia dostępu są widoczne razem.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
Potrzebne są tutaj trzy oddzielne ograniczniki: jeden między kolumnami, drugi między elementami tablicy (ARRAY) lub struktury (STRUCT) oraz trzeci między kluczem MAP a jego wartością. Po utworzeniu tabeli każda kolumna złożona jest odczytywana za pomocą własnego akcesora.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Poniższa tabela podsumowuje, który akcesor należy do którego typu.
| Typ | Jak odczytać wartość |
|---|---|
| SZYK | Indeks zerowy, np. umiejętności[0] |
| MAP | Wyszukiwanie kluczowe w nawiasach kwadratowych, np. deductions['tax'] |
| STRUKTURA | Notacja kropkowa w nazwie pola, np. adres.miasto |
| UNIONTYPE | Rzadko używany, ponieważ obsługa zapytań pozostała niekompletna |
Typy złożone mogą być zagnieżdżane, więc ARRAY > jest prawidłową deklaracją kolumny. Po ustaleniu układu kolumn, same tabele są tworzone przy użyciu instrukcji omówionych w Hive tworzy, zmienia i usuwa tabele.
Jak tworzyć i upuszczać bazy danych w Hive
Baza danych w Hive to po prostu przestrzeń nazw grupująca tabele, dlatego jest to pierwszy obiekt tworzony przed rozpoczęciem jakichkolwiek operacji na tabelach. Poniżej przedstawiono kroki tworzenia i usuwania baz danych w Hive.
Krok 1) Utwórz bazę danych w Hive
Aby utworzyć bazę danych w powłoce Hive, musimy użyć polecenia pokazanego w poniższej składni:
Składnia:
Create database <DatabaseName>
Przykład: Utwórz bazę danych „guru99”
Poniższy zrzut ekranu pokazuje polecenie create, po którym następuje polecenie show, wyświetlające listę wszystkich baz danych w klastrze.
Na powyższym zrzucie ekranu widzimy, że robimy dwie rzeczy:
- Tworzenie bazy danych „guru99” w Hive
- Wyświetlanie istniejących baz danych za pomocą polecenia „show”
Na tym samym ekranie po wykonaniu polecenia show wyświetlana jest baza danych „guru99”, co oznacza, że baza danych „guru99” została pomyślnie utworzona.
Krok 2) Usunięcie bazy danych w Hive
Do upuszczeniaping bazy danych w powłoce Hive, musimy użyć polecenia „drop”, jak pokazano w poniższej składni:
Składnia:
Drop database <DatabaseName>
Przykład: Usuń bazę danych guru99
Na kolejnym zrzucie ekranu najpierw wykonywane jest polecenie drop, a następujące po nim polecenie show nie wyświetla już bazy danych.
Na powyższym zrzucie ekranu robimy dwie rzeczy:
- Jesteśmy kropląping baza danych „guru99” z Hive
- Sprawdzanie krzyżowe tego samego za pomocą polecenia „show”
Na tym samym ekranie, po sprawdzeniu baz danych poleceniem show, baza danych „guru99” nie pojawia się w Hive. Możemy więc potwierdzić, że baza danych „guru99” została usunięta.
Polecenia bazy danych Hive: USE, DESCRIBE, SHOW i ALTER DATABASE
Dwa powyższe polecenia używają najkrótszej formy. Udokumentowana składnia zawiera klauzule opcjonalne, które decydują o miejscu przechowywania plików i o tym, co się stanie, gdy nazwa jest już zajęta.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
Słowa kluczowe DATABASE i SCHEMA są wymienne, więc CREATE SCHEMA i CREATE DATABASE działają dokładnie tak samo. Pozostałe polecenia uzupełniają codzienną pracę o przestrzeń nazw.
| Command | Co to robi |
|---|---|
| POKAŻ BAZY DANYCH; | Wyświetla listę wszystkich baz danych zarejestrowanych w metamagazynie |
| USE nazwa_bazy_danych; | Ustawia bieżącą bazę danych tak, aby nazwy tabel nie wymagały prefiksu |
| OPIS BAZY DANYCH nazwa_bazy_danych; | Zgłasza komentarz, lokalizację HDFS i właściciela |
| OPIS ROZSZERZONA BAZA DANYCH nazwa_bazy_danych; | Dodaje pary klucz-wartość DBPROPERTIES do tego wyniku |
| ALTER DATABASE nazwa_bazy_danych SET DBPROPERTIES (…); | Dodaje lub zastępuje właściwości metadanych |
| ALTER DATABASE database_name SET OWNER USER user_name; | Przenosi własność na innego użytkownika lub rolę |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | Zmienia ścieżkę używaną przez tabele utworzone od tego momentu |
Warto zapamiętać dwa ustawienia domyślne. Bez klauzuli LOCATION pliki znajdują się w katalogu magazynu, zazwyczaj /user/hive/warehouse/database_name.db, a bez klauzuli IF EXISTS usunięcie brakującej nazwy powoduje błąd zamiast przejść bez problemu. Oba ustawienia są przechowywane w Metamagazyn Hive.
Konwersja typów danych Hive i typowe błędy
Typy nie zawsze są używane dokładnie tak, jak zostały zadeklarowane. Hive automatycznie rozszerza wartość, gdy nie ma możliwości utraty informacji, a resztę pozostawia jawnej konwersji.
- Niejawne poszerzenie następuje po łańcuchu TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, a STRING zawierający cyfry jest promowany do DOUBLE.
- Zwężenie nigdy nie następuje samoistnie, więc wartość DOUBLE przypisana do kolumny INT wymaga pisemnej konwersji.
- CAST wykonuje tę zapisaną konwersję i zwraca NULL zamiast błędu, jeśli wartości nie można przekonwertować.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Poniższe błędy są przyczyną większości niespodzianek, z jakimi spotykają się początkujący podczas swojego pierwszego schematu.
| Objaw | Przyczyna i naprawa |
|---|---|
| Usuwanie kończy się niepowodzeniem, podczas gdy baza danych nadal zawiera tabele | RESTRICT jest ustawieniem domyślnym. Dodaj CASCADE, aby usunąć tabele z tym ustawieniem. |
| Długi sznurek jest skrócony | VARCHAR bezgłośnie obcina tekst poza zadeklarowaną długość. Użyj STRING, gdy nie jest wymagany żaden limit. |
| Kolumna po konwersji ma wartość NULL | CAST nie mógł przeanalizować wartości. Sprawdź dane źródłowe przed poszerzeniem typu. |
| Wartość waluty traci swoje paisy lub centy | DECIMAL bez argumentów oznacza DECIMAL(10,0). Podaj skalę jawnie. |
| Dwie identycznie wyglądające daty nigdy nie pasują do siebie | Data typu STRING i kolumna DATE to różne typy. Przed porównaniem należy rzutować jedną stronę. |
Gdy typy zachowują się prawidłowo, następnym krokiem jest załadowanie i zapytanie samych danych, co zostało omówione w Zapytania Hive z opcją Sortuj według, Grupuj według i Cluster By.



