Datové typy úlu: Jak vytvářet a rušit databáze v úlu
⚡ Chytré shrnutí
Datové typy Hive definují, co může každý sloupec tabulky obsahovat, a příkazy CREATE DATABASE a DROP DATABASE nastavují nebo odebírají jmenný prostor, ve kterém se tyto tabulky nacházejí v metaúložišti Hive.

Datové typy jsou velmi důležitými prvky v dotazovacím jazyce Hive a modelování dat. Pro definování typů sloupců tabulky musíme znát datové typy a jejich použití.
Následuje stručný přehled některých datových typů přítomných v Hive:
- Číselné typy
- Typy řetězců
- Typy data/času
- Komplexní typy
Datové typy v Hive
Každý sloupec Hive je deklarován s jedním z níže uvedených typů. Primitivní rodiny jsou uvedeny jako první, následované komplexními typy, které obsahují více než jednu hodnotu v jednom sloupci.
Číselné datové typy podregistru
Číselné sloupce mají velikost od jednoho bajtu do osmi bajtů, takže výběr nejmenšího typu, který odpovídá hodnotám, snižuje náklady na úložiště i skenování.
| Typ | Přidělení paměti |
|---|---|
| TINYINT | 1bajtové celé číslo se znaménkem (-128 až 127) |
| SMALLINT | 2bajtové celé číslo se znaménkem (-32,768 až 32,767) |
| INT | 4bajtové celé číslo se znaménkem (-2,147,483,648 až 2,147,483,647) |
| VELKÝ | 8bajtové celé číslo se znaménkem (-9,223,372,036,854,775,808 až 9,223,372,036,854,775,807) |
| FLOAT | 4bajtové číslo s plovoucí desetinnou čárkou a jednoduchou přesností |
| DVOJNÁSOBEK | 8bajtové číslo s dvojitou přesností a plovoucí desetinnou čárkou |
| DESETINNÝ | V tomto typu můžeme definovat přesnost a škálování jako DECIMAL(precision, scale). Pokud jsou vynechány, Hive používá DECIMAL(10,0). |
Datové typy řetězce podregistru
Sloupce znaků se dodávají ve třech tvarech a rozdíl spočívá v tom, zda Hive vynucuje deklarovanou délku.
| Typ | Délka |
|---|---|
| CHAR | Pevná délka, až 255 znaků. Kratší hodnoty jsou doplněny mezerami. |
| VARCHAR | 1 až 65 535 znaků. Delší hodnota je tiše oříznuta. |
| STRING | Zde můžeme definovat délku (bez omezení) |
Typy dat data/času podregistru
Časové sloupce jsou uloženy bez jakéhokoli časového posunu, což je dobré si pamatovat před porovnáváním hodnot zapsaných různými klastry.
| Typ | Používání |
|---|---|
| Timestamp | Podporuje tradiční Unix časové razítko s volitelnou přesností na nanosekundy |
| Datum | Je ve formátu RRRR-MM-DD. Rozsah hodnot podporovaných pro typ data je 0000-01-01 až 9999-12-31, v závislosti na podpoře primitivem. Java typické datum |
Různé datové typy Hive
Dva další primitiva se nacházejí mimo numerické, řetězcové a datové rodiny, ale pravidelně se objevují v reálných schématech.
| Typ | Používání |
|---|---|
| BOOLEAN | Ukládá hodnotu true nebo false |
| Binární | Ukládá pole bajtů, které zabraňuje vložení nezpracovaného obsahu do sloupce typu STRING. |
Komplexní datové typy podregistru
Komplexní typy vnořují hodnoty do jednoho sloupce, což eliminuje dodatečné spojení, které by relační návrh potřeboval.
| Typ | Používání |
|---|---|
| Pole | ARRAY Záporné hodnoty a nekonstantní výrazy nejsou povoleny |
| Mapy | MAPA Záporné hodnoty a nekonstantní výrazy nejsou povoleny |
| Struktury | STRUKTURA |
| svaz | TYP UNION |
Příklad komplexních datových typů Hive
Výše uvedená tabulka uvádí formulář deklarace. Následující příkaz vkládá tři komplexní typy do jedné tabulky, takže oddělovací klauzule a syntaxe přístupu lze vidět společně.
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;
Zde jsou potřeba tři samostatné oddělovače: jeden mezi sloupci, druhý mezi položkami ARRAY nebo STRUCT a třetí mezi klíčem MAP a jeho hodnotou. Jakmile tabulka existuje, každý komplexní sloupec se čte s vlastním přístupovým objektem.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Níže uvedená tabulka shrnuje, který přístupový objekt patří do kterého typu.
| Typ | Jak se čte hodnota |
|---|---|
| ARRAY | Index založený na nule, například dovednosti[0] |
| MAP | Vyhledávání klíčů v hranatých závorkách, například deducts['daň'] |
| STRUKTURA | Tečková notace v názvu pole, například adresa.město |
| TYP UNION | Zřídka se používá, protože podpora dotazů pro něj zůstala neúplná. |
Složité typy mohou být vnořené, například ARRAY. > je platná deklarace sloupce. Jakmile je rozvržení sloupců nastaveno, samotné tabulky se sestaví pomocí příkazů uvedených v Vytváření, úprava a odstraňování tabulek v Hive.
Jak vytvářet a rušit databáze v Hive
Databáze v Hive je jednoduše jmenný prostor, který seskupuje tabulky, takže je to první objekt, který se vytvoří před zahájením jakékoli práce s tabulkami. Následují kroky, jak v Hive vytvářet a odstraňovat databáze.
Krok 1) Vytvoření databáze v Hive
Pro vytvoření databáze v shellu Hive musíme použít příkaz, jehož syntaxe je znázorněna níže:
Syntaxe:
Create database <DatabaseName>
Příklad: Vytvoření databáze „guru99“
Níže uvedený snímek obrazovky ukazuje příkaz create následovaný příkazem show, který vypíše všechny databáze v clusteru.
Z výše uvedeného snímku obrazovky vyplývá, že děláme dvě věci:
- Vytvoření databáze „guru99“ v Hive
- Zobrazení existujících databází pomocí příkazu „show“
Na stejné obrazovce se na konci po spuštění příkazu show zobrazí databáze „guru99“, což znamená, že databáze „guru99“ byla úspěšně vytvořena.
Krok 2) Vložení databáze do Hive
Pro poklesping Pro databázi v shellu Hive musíme použít příkaz „drop“, jak je znázorněno v následující syntaxi:
Syntaxe:
Drop database <DatabaseName>
Příklad: Zrušit databázi guru99
Na dalším snímku obrazovky se příkaz drop spustí jako první a následující příkaz show již nezobrazuje databázi.
Na výše uvedeném snímku obrazovky děláme dvě věci:
- Jsme kapkaping databáze 'guru99' z Hive
- Zkontrolujte totéž pomocí příkazu „show“
Na stejné obrazovce se po kontrole databází příkazem show databáze „guru99“ v Hive nezobrazuje. Nyní tedy můžeme potvrdit, že databáze „guru99“ byla odstraněna.
Příkazy databáze Hive: USE, DESCRIBE, SHOW a ALTER DATABASE
Dva výše uvedené příkazy používají svou nejkratší formu. Zdokumentovaná syntaxe obsahuje volitelné klauzule, které určují, kam soubory skončí a co se stane, když je název již obsazený.
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];
Klíčová slova DATABASE a SCHEMA jsou v celém textu zaměnitelná, takže příkazy CREATE SCHEMA a CREATE DATABASE dělají přesně totéž. Zbývající příkazy doplňují každodenní práci s jmenným prostorem.
| Příkaz | Co to dělá |
|---|---|
| ZOBRAZIT DATABÁZE; | Vypíše všechny databáze registrované v metastore |
| USE název_databáze; | Nastaví aktuální databázi tak, aby názvy tabulek nepotřebovaly žádný prefix. |
| DESCRIBE DATABASE název_databáze; | Nahlásí komentář, umístění HDFS a vlastníka |
| DESCRIBE DATABASE EXTENDED název_databáze; | Přidá páry klíč-hodnota DBPROPERTIES k tomuto výstupu. |
| ALTER DATABASE název_databáze SET DBPROPERTIES (…); | Přidává nebo nahrazuje vlastnosti metadat |
| ALTER DATABASE název_databáze SET OWNER USER jméno_uživatele; | Převádí vlastnictví na jiného uživatele nebo roli |
| ALTER DATABASE název_databáze SET LOCATION cesta_k_hdfs; | Změní cestu používanou tabulkami vytvořenými od té doby |
Za zapamatování stojí dvě výchozí hodnoty. Bez klauzule LOCATION se soubory nacházejí v adresáři datového skladu, obvykle /user/hive/warehouse/database_name.db, a bez IF EXISTS odstranění chybějícího názvu vyvolá chybu, místo aby se tiše provedl proces. Obě nastavení jsou uložena v Metaúložiště Hive.
Konverze datových typů Hive a běžné chyby
Typy se ne vždy používají přesně tak, jak je deklarováno. Hive automaticky rozšiřuje hodnotu, když nelze ztratit žádnou informaci, a vše ostatní ponechává na explicitní konverzi.
- Implicitní rozšiřování se řídí řetězcem TINYINT na SMALLINT, poté INT, poté BIGINT, poté FLOAT a poté DOUBLE, přičemž řetězec STRING, který obsahuje číslice, je povýšen na DOUBLE.
- Zúžení se nikdy neděje samo od sebe, takže hodnota DOUBLE přiřazená sloupci typu INT vyžaduje písemnou konverzi.
- Funkce CAST provede tuto písemnou konverzi a v případě, že hodnotu nelze převést, vrátí hodnotu NULL, nikoli chybu.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Níže uvedené chyby vysvětlují většinu překvapení, se kterými se začátečníci setkávají při tvorbě svého prvního schématu.
| Příznak | Příčina a oprava |
|---|---|
| Odstranění selže, i když databáze stále obsahuje tabulky. | Výchozí nastavení je RESTRICT. Přidáním CASCADE se tabulky s ním odstraní. |
| Dlouhý řetězec přichází zkrácený | VARCHAR tiše ořezává za hranicí deklarované délky. Pokud není požadováno žádné omezení, použijte STRING. |
| Sloupec se po konverzi načte jako NULL. | CAST nemohl analyzovat hodnotu. Před rozšířením typu zkontrolujte zdrojová data. |
| Hodnoty měn ztrácejí své paise nebo centy | DECIMAL bez argumentů znamená DECIMAL(10,0). Uveďte stupnici explicitně. |
| Dvě vypadající identicky data se nikdy neshodují | Sloupec typu STRING date a sloupec typu DATE jsou různé typy. Před porovnáním odečtěte jednu stranu. |
Jakmile se typy chovají správně, dalším krokem je načítání a dotazování samotných dat, což je popsáno v Dotazy na podregistr s funkcemi Řazení podle, Seskupení podle a Cluster By.


