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 numeryczne: Funkcje od TINYINT do BIGINT obsługują liczby całkowite, natomiast DECIMAL(precyzja, skala) zachowuje dokładne wartości, czego nie potrafią zrobić funkcje FLOAT i DOUBLE.
  • 🔤 Typy ciągów: STRING nie ma określonego limitu, VARCHAR akceptuje od 1 do 65535 znaków, a CHAR jest ustalony na maksymalnie 255.
  • 📅 Data i godzina: Funkcja DATE przechowuje zwykłą wartość YYYY-MM-DD, natomiast funkcja TIMESTAMP dodaje do niej opcjonalną precyzję nanosekundową.
  • 🧩 Typy złożone: ARRAY, MAP, STRUCT i UNIONTYPE pakują kilka powiązanych wartości do jednej kolumny zamiast wielu.
  • 🏗️. Utwórz bazę danych: CREATE DATABASE rejestruje przestrzeń nazw w metamagazynie, a SHOW DATABASES potwierdza jej istnienie.
  • 🗑️ Upuść bazę danych: Polecenie DROP DATABASE usuwa przestrzeń nazw, a polecenie CASCADE jest wymagane, jeśli tabele nadal znajdują się w jej obrębie.

Typy danych Hive oraz sposób tworzenia i usuwania baz danych w 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.

Powłoka Hive tworzy bazę danych guru99 i wyświetla bazy danych za pomocą programu Show

Na powyższym zrzucie ekranu widzimy, że robimy dwie rzeczy:

  1. Tworzenie bazy danych „guru99” w Hive
  2. 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.

Zrzut skorupy ulaping baza danych guru99 i potwierdzenie usunięcia za pomocą show

Na powyższym zrzucie ekranu robimy dwie rzeczy:

  1. Jesteśmy kropląping baza danych „guru99” z Hive
  2. 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.

FAQ

Nie. DATABASE i SCHEMA to wymienne słowa kluczowe w HiveQL, więc CREATE SCHEMA sales i CREATE DATABASE sales generują ten sam obiekt metastore. Wybór zależy wyłącznie od stylu firmy.

W katalogu magazynu, zwykle /user/hive/warehouse/database_name.db w systemie HDFS. Klauzula LOCATION w poleceniu CREATE DATABASE zastępuje tę ścieżkę, a polecenie DESCRIBE DATABASE raportuje, która lokalizacja została faktycznie użyta.

STRING jest zazwyczaj wybierany, ponieważ nie ma zadeklarowanego limitu i nie wymaga wypełnienia. VARCHAR pomaga, gdy trzeba wymusić długość, a CHAR nadaje się do krótkich kodów o stałej szerokości, takich jak skróty krajów.

DOUBLE to binarny zapis zmiennoprzecinkowy, więc powtarzane sumy zmieniają się o ułamki centa. DECIMAL przechowuje dokładne wartości z określoną precyzją i skalą, co pozwala na powtarzalność sum finansowych w różnych obliczeniach.

Zwykły TIMESTAMP nie uwzględnia strefy czasowej i jest odczytywany dokładnie tak, jak został zapisany. Wersja Hive 3.1 dodała TIMESTAMP Z LOKALNĄ STREFĄ CZASOWĄ, który normalizuje wartość do UTC podczas zapisu i konwertuje ją podczas odczytu.

Tak. STRUKTURA może znajdować się wewnątrz TABLIC, a wartość MAP może sama być STRUKTURĄ, więc TABLICA > jest ważny w UlGłębokie zagnieżdżanie komplikuje rozgraniczniki, dlatego należy stosować je płytko.

Tak. Narzędzia do profilowania danych pobierają próbki kardynalności, współczynników null i zakresów wartości, a następnie sugerują najwęższy możliwy do zastosowania typ i format pliku. Potraktuj sugestię jako wersję roboczą, ponieważ model nie jest w stanie przewidzieć przyszłych obciążeń.

Copilot tworzy instrukcje CREATE TABLE i CREATE DATABASE na podstawie krótkiego komentarza, a asystenci agenta mogą konwertować przykładowy plik na schemat. Zawsze sprawdzaj skalę DECIMAL i klauzule delimiter przed uruchomieniem wyniku.

Podsumuj ten post następująco: