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.

  • 🔢 Numerikus típusok: A TINYINT-től BIGINT-ig terjedő függvények egész számokat fednek le, míg a DECIMAL(precision, scale) pontos értékeket tárol, amelyeket a FLOAT és a DOUBLE nem tud.
  • 🔤 Karakterlánc típusok: A STRING karakternek nincs deklarált korlátja, a VARCHAR karakter 1 és 65535 között lehet, míg a CHAR karakter hossza fixen 255 karakterig terjedhet.
  • 📅 Dátum és idő: A DATE egy egyszerű ÉÉÉÉ-HH-NN értéket tárol, és a TIMESTAMP opcionálisan nanoszekundumos pontossággal egészíti ki.
  • 🧩 Komplex típusok: Az ARRAY, MAP, STRUCT és UNIONTYPE függvények több kapcsolódó értéket csomagolnak egyetlen oszlopba a sok helyett.
  • 🏗️ Adatbázis létrehozása: A CREATE DATABASE parancs regisztrál egy névteret a metaadattárban, a SHOW DATABASES parancs pedig megerősíti annak létezését.
  • 🗑️ Adatbázis törlése: A DROP DATABASE eltávolítja a névteret, és a CASCADE utasításra mindig szükség van, ha még táblák vannak benne.

Hive adattípusok és adatbázisok létrehozása és törlése a Hive-ban

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 Hive shell létrehozza a guru99 adatbázist és listázza az adatbázisokat a show paranccsal

A fenti képernyőkép alapján két dolgot csinálunk:

  1. „guru99” adatbázis létrehozása a Hive-ban
  2. 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.

Kaptárhéj cseppping a guru99 adatbázis és az eltávolítás megerősítése a show paranccsal

A fenti képernyőképen két dolgot csinálunk:

  1. Cseppek vagyunkping 'guru99' adatbázis a Hive-ból
  2. 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.

GYIK

Nem. A DATABASE és a SCHEMA felcserélhető kulcsszavak a HiveQL-ben, így a CREATE SCHEMA sales és a CREATE DATABASE sales ugyanazt a metaadattár objektumot hozza létre. A választás pusztán a ház stílusától függ.

A HDFS-en a warehouse könyvtár alatt található, általában a /user/hive/warehouse/database_name.db fájlban. A CREATE DATABASE LOCATION záradéka felülírja ezt az elérési utat, és a DESCRIBE DATABASE jelzi, hogy melyik helyet használták valójában.

A STRING a szokásos választás, mivel nincs deklarált korlátja, és nem igényel kitöltést. A VARCHAR akkor segít, ha egy hosszt kötelező érvényűvé kell tenni, a CHAR pedig rövid, fix szélességű kódokhoz, például országrövidítésekhez illik.

A DOUBLE egy bináris lebegőpontos szám, tehát az ismétlődő összegek egy cent töredékével eltérnek. A DECIMAL pontos értékeket tárol a megadott pontossággal és skálán, ami biztosítja a pénzügyi összesítések reprodukálhatóságát a futtatások között.

Egy sima TIMESTAMP időzóna-mentes, és pontosan úgy olvassa vissza a rendszer, ahogyan megírta. A Hive 3.1-es verziójában hozzáadódott a TIMESTAMP WITH LOCAL TIME ZONE funkció, amely íráskor normalizálja az értéket UTC-re, olvasáskor pedig konvertálja azt.

Igen. Egy STRUCT lehet egy ARRAY-n belül, és egy MAP érték maga is lehet egy STRUCT, tehát ARRAY > érvényes a következőben: KaptárA mély beágyazás bonyolítja az elválasztó karaktereket, ezért érdemes sekélyen elhelyezni.

Igen. Az adatprofilozó eszközök mintavételezik a kardinalitást, a nullértékeket és az értéktartományokat, majd javaslatot tesznek a legszűkebb, működőképes típusra és egy fájlformátumra. A javaslatot vázlatként kell kezelni, mert a modell nem látja a jövőbeli munkaterheléseket.

A Copilot egy rövid megjegyzésből készíti a CREATE TABLE és CREATE DATABASE utasításokat, az ügynöki asszisztensek pedig egy mintafájlt sémává alakíthatnak. Az eredmény futtatása előtt mindig ellenőrizze a DECIMAL skálát és az elválasztó záradékokat.

Foglald össze ezt a bejegyzést a következőképpen: