Hive adattípusok: Adatbázisok létrehozása és eldobása a Hive-ben
⚡ Okos összefoglaló
A Hive adattípusai határozzák meg, hogy az egyes táblaoszlopok mit tartalmazhatnak, a CREATE DATABASE és DROP DATABASE parancsok pedig beállítják vagy eltávolítják azt a névteret, amelyben ezek a táblák a Hive metaadattárban találhatók.

Az adattípusok nagyon fontos elemek a Hive lekérdezési nyelvében és az adatmodellezésben. A tábla oszloptípusainak definiálásához ismernünk kell az adattípusokat és azok használatát.
Az alábbiakban rövid áttekintést nyújtunk a Hive-ban található néhány adattípusról:
- Numerikus típusok
- String típusok
- Dátum/idő típusok
- Komplex típusok
Adattípusok a Hive-ben
Minden Hive oszlop az alábbi típusok egyikével van deklarálva. Az egyszerű családok kerülnek először sorra, majd az összetett típusok következnek, amelyek egyetlen oszlopban egynél több értéket tartalmaznak.
Hive numerikus adattípusok
A numerikus oszlopok mérete egy bájttól nyolc bájtig terjedhet, így a legkisebb, az értékekhez illeszkedő típus kiválasztása alacsonyan tartja mind a tárolási, mind a beolvasási költségeket.
| típus | Memóriakiosztás |
|---|---|
| TINYINT | 1 bájtos előjeles egész szám (-128-tól 127-ig) |
| KICSIK | 2 bájtos előjeles egész szám (-32,768-tól 32,767-ig) |
| INT | 4 bájtos előjeles egész szám (-2,147,483,648-tól 2,147,483,647-ig) |
| BIGINT | 8 bájtos előjeles egész szám (-9,223,372,036,854,775,808-tól 9,223,372,036,854,775,807-ig) |
| ÚSZÓ | 4 bájtos, egyszeres pontosságú lebegőpontos szám |
| KETTŐS | 8 bájtos dupla pontosságú lebegőpontos szám |
| DECIMÁLIS | Ebben a típusban a pontosságot és a skálát a DECIMAL(pontosság, skála) alakban definiálhatjuk. Ha ezek hiányoznak, a Hive a DECIMAL(10,0) alakot használja. |
Hive String adattípusok
A karakter oszlopok háromféle alakúak, és a különbség abban rejlik, hogy a Hive érvényesít-e deklarált hosszúságot.
| típus | Hossz |
|---|---|
| CHAR | Fix hosszúságú, legfeljebb 255 karakter. A rövidebb értékeket szóközökkel töltjük ki. |
| VARCHAR | 1–65 535 karakter. A hosszabb értékeket a rendszer csendben csonkolja. |
| STRING | Itt definiálhatjuk a hosszt (nincs korlát) |
Kaptár dátum/idő adattípusok
Az időbeli oszlopok időzóna-eltolás nélkül tárolódnak, amit érdemes megjegyezni a különböző klaszterek által írt értékek összehasonlítása előtt.
| típus | Használat |
|---|---|
| Timestamp | Támogatja a hagyományos Unix időbélyeg, opcionális nanoszekundumos pontossággal |
| találka | ÉÉÉÉ-HH-NN formátumban van. A dátumtípus által támogatott értéktartomány 0000-01-01 és 9999-12-31 között van, a primitív támogatásától függően. Java tipikus dátum |
Hive Egyéb adattípusok
Két további primitív a numerikus, karakterlánc és dátum családokon kívül esik, de rendszeresen megjelennek a valós sémákban.
| típus | Használat |
|---|---|
| BOOLAI | Igaz vagy hamis értéket tárol |
| kétkomponensű | Bájtokból álló tömböt tárol, amely távol tartja a nyers tartalmat a STRING oszloptól. |
Hive összetett adattípusok
Az összetett típusok egyetlen oszlopba ágyazzák az értékeket, ami megszünteti a relációs tervezéshez szükséges extra illesztést.
| típus | Használat |
|---|---|
| tömbök | SOR Negatív értékek és nem állandó kifejezések nem megengedettek |
| Térképek | TÉRKÉP Negatív értékek és nem állandó kifejezések nem megengedettek |
| Struktúrák | STRUKTÚRA |
| Unió | UNIÓTÍPUS |
Hive komplex adattípusok példája
A fenti táblázat a deklarációs űrlapot mutatja. Az alábbi utasítás három összetett típust helyez el egy táblázatban, így az elválasztó záradékok és a hozzáférési szintaxis együtt látható.
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;
Három külön elválasztójelre van szükség: egyre az oszlopok között, egy másodikra egy ARRAY vagy STRUCT elemei között, és egy harmadikra egy MAP kulcs és annak értéke között. Miután a tábla létezik, minden összetett oszlopot a saját elérővel kell beolvasni.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Az alábbi táblázat összefoglalja, hogy melyik elérő melyik típusba tartozik.
| típus | Hogyan olvassuk be az értéket |
|---|---|
| SOR | Nulla alapú index, például készségek[0] |
| MAP | Szögletes zárójelben lévő kulcskeresés, például deductions['tax'] |
| STRUCT | Pontok jelölése a mező nevében, például cím.város |
| UNIÓTÍPUS | Ritkán használják, mert a lekérdezés-támogatása hiányos maradt. |
Az összetett típusok egymásba ágyazhatók, így az ARRAY > egy érvényes oszlopdeklaráció. Miután az oszlopok elrendezése megtörtént, maguk a táblázatok épülnek fel a részben tárgyalt utasításokkal. A kaptár létrehozza, módosítja és elveti a táblát.
Adatbázisok létrehozása és eldobása a Hive-ban
A Hive-ban egy adatbázis egyszerűen egy névtér, amely a táblákat csoportosítja, tehát ez az első objektum, amelyet létre kell hozni, mielőtt bármilyen táblákkal végzett munka megkezdődne. A következő lépések bemutatják, hogyan hozhat létre és törölhet adatbázisokat a Hive-ban.
1. lépés) Adatbázis létrehozása a Hive-ban
Egy Hive shellben adatbázis létrehozásához a következő parancsot kell használnunk:
Syntax:
Create database <DatabaseName>
Példa: „guru99” adatbázis létrehozása
Az alábbi képernyőképen a create utasítás látható, amelyet egy show parancs követ, amely felsorolja a fürtön található összes adatbázist.
A fenti képernyőkép alapján két dolgot csinálunk:
- „guru99” adatbázis létrehozása a Hive-ban
- Meglévő adatbázisok megjelenítése a „show” paranccsal
Ugyanazon a képernyőn a show parancs végrehajtásakor a „guru99” adatbázis jelenik meg a végén, ami azt jelenti, hogy a „guru99” adatbázis sikeresen létrejött.
2. lépés) Adatbázis törlése a Hive-ban
Csepp eseténping Egy Hive shellben lévő adatbázishoz a „drop” parancsot kell használnunk az alábbi szintaxis szerint:
Syntax:
Drop database <DatabaseName>
Példa: guru99 adatbázis törlése
A következő képernyőképen a drop utasítás fut le először, és az azt követő show parancs már nem listázza az adatbázist.
A fenti képernyőképen két dolgot csinálunk:
- Cseppek vagyunkping 'guru99' adatbázis a Hive-ból
- Ugyanezt ellenőrizzük a „show” paranccsal
Ugyanazon a képernyőn, miután a show paranccsal ellenőriztük az adatbázisokat, a „guru99” adatbázis nem jelenik meg a Hive-ban. Tehát most már megerősíthetjük, hogy a „guru99” adatbázis törlődött.
Hive adatbázisparancsok: USE, DESCRIBE, SHOW és ALTER DATABASE
A fenti két utasítás a legrövidebb formáját használja. A dokumentált szintaxis opcionális záradékokat tartalmaz, amelyek eldöntik, hogy hová kerüljenek a fájlok, és mi történjen, ha a név már foglalt.
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];
A DATABASE és a SCHEMA kulcsszavak felcserélhetők, tehát a CREATE SCHEMA és a CREATE DATABASE parancsok pontosan ugyanazt teszik. A fennmaradó parancsok a névtérrel végzett napi munkát teszik teljessé.
| parancs | Mit csinál |
|---|---|
| ADATBÁZISOK MUTATÁSA; | Felsorolja a metaadattárban regisztrált összes adatbázist |
| USE adatbázis_neve; | Beállítja az aktuális adatbázist, hogy a táblanevekhez ne kelljen előtagot adni |
| ADATBÁZIS LEÍRÁSA adatbázis_neve; | Jelenti a megjegyzést, a HDFS helyét és a tulajdonost |
| BŐVÍTETT ADATBÁZIS LEÍRÁSA adatbázis_neve; | Hozzáadja a DBPROPERTIES kulcs-érték párokat ehhez a kimenethez. |
| ALTER DATABASE adatbázis_neve SET DBPROPERTIES (…); | Metaadat-tulajdonságok hozzáadása vagy cseréje |
| ALTER DATABASE adatbázis_név SET OWNER USER felhasználó_név; | Tulajdonjog átruházása egy másik felhasználóra vagy szerepkörre |
| ALTER DATABASE adatbázis_név SET LOCATION hdfs_path; | Megváltoztatja az ettől kezdve létrehozott táblák által használt elérési utat |
Két alapértelmezett beállítást érdemes megjegyezni. LOCATION záradék nélkül a fájlok a warehouse könyvtárban találhatók, általában a /user/hive/warehouse/adatbázis_neve.db címen, IF EXISTS záradék nélkül pedig egy hiányzó névre történő drop hibát jelez a csendes átfutás helyett. Mindkét beállítás a Hive metaadattár.
Hive adattípus-konverzió és gyakori hibák
A típusokat nem mindig pontosan a deklarált módon használjuk. A Hive automatikusan kiszélesíti az értéket, ha nem veszhet el információ, és minden mást egy explicit konverzióra hagy.
- Az implicit szélesítés a TINYINT-ből SMALLINT-be, majd INT-be, majd BIGINT-be, majd FLOAT-ba, végül DOUBLE-ba lép, és egy számjegyeket tartalmazó STRING DOUBLE-ba lép elő.
- A szűkítés soha nem történik meg önmagában, így egy INT oszlophoz rendelt DOUBLE írásos konverziót igényel.
- A CAST végrehajtja ezt az írásos konverziót, és NULL értéket ad vissza hiba helyett, ha az érték nem konvertálható.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Az alábbi hibák magyarázzák a legtöbb meglepetést, amivel a kezdők az első sémájuk során szembesülnek.
| Tünet | Ok és megoldás |
|---|---|
| A drop sikertelen, miközben az adatbázis még tartalmaz táblákat | A RESTRICT az alapértelmezett. A CASCADE karakterlánccal kiegészítve a táblázatokat el lehet távolítani. |
| Egy hosszú húr megrövidítve érkezik | A VARCHAR utasítás a megadott hosszán túl csendben csonkolja a karaktereket. Ha nincs szükség korlátozásra, akkor STRING utasítást használjon. |
| Egy oszlop NULL-ként jelenik meg egy konverzió után | A CAST nem tudta elemezni az értéket. A típus kiszélesítése előtt ellenőrizze a forrásadatokat. |
| A valuták értéke elveszíti a pauzuját vagy centjét | A DECIMAL argumentumok nélkül jelentése DECIMAL(10,0). Adja meg explicit módon a skálát. |
| Két egyforma kinézetű randi sosem egyezik | A STRING dátum és a DATE oszlop különböző típusok. Az összehasonlítás előtt az egyik oldalt vessük össze. |
Miután a típusok viselkedése megkezdődött, a következő lépés maga az adat betöltése és lekérdezése, amelyet a következő részben tárgyalunk: Hive lekérdezések rendezési szempont, csoportosítási szempont és Cluster By.


