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.

  • 🔢 Číselné typy: Funkce TINYINT až BIGINT pokrývají celá čísla, zatímco DECIMAL(precision, scale) uchovává přesné hodnoty, které funkce FLOAT a DOUBLE nedokážou.
  • 🔤 Typy řetězců: Pro STRING není deklarován žádný limit, VARCHAR akceptuje 1 až 65535 znaků a CHAR je pevně stanoven na maximálně 255 znaků.
  • 📅 Datum a čas: Funkce DATE ukládá prostou hodnotu ve formátu RRRR-MM-DD a funkce TIMESTAMP k ní přidává volitelnou přesnost na nanosekundy.
  • 🧩 Složité typy: Funkce ARRAY, MAP, STRUCT a UNIONTYPE vkládají několik souvisejících hodnot do jednoho sloupce místo mnoha.
  • 🏗️ Vytvořte databázi: CREATE DATABASE zaregistruje jmenný prostor v metaúložišti a SHOW DATABASES potvrdí jeho existenci.
  • 🗑️ Zrušit databázi: DROP DATABASE odstraní jmenný prostor a CASCADE je vyžadován vždy, když se v něm stále nacházejí tabulky.

Datové typy Hive a jak vytvářet a mazat databáze v 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.

Hive shell vytváří databázi guru99 a vypisuje databáze pomocí show

Z výše uvedeného snímku obrazovky vyplývá, že děláme dvě věci:

  1. Vytvoření databáze „guru99“ v Hive
  2. 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.

Padání skořápky úluping databáze guru99 a potvrzení odstranění pomocí show

Na výše uvedeném snímku obrazovky děláme dvě věci:

  1. Jsme kapkaping databáze 'guru99' z Hive
  2. 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.

Nejčastější dotazy

Ne. DATABASE a SCHEMA jsou v HiveQL zaměnitelná klíčová slova, takže CREATE SCHEMA sales a CREATE DATABASE sales vytvářejí stejný objekt metastore. Volba je čistě otázkou stylu interního rozhraní.

V adresáři datového skladu se obvykle nachází /user/hive/warehouse/database_name.db na HDFS. Klauzule LOCATION v CREATE DATABASE tuto cestu přepíše a DESCRIBE DATABASE hlásí, které umístění bylo skutečně použito.

Typ STRING je obvyklou volbou, protože nemá žádné deklarované omezení a nepotřebuje žádné odsazení. Typ VARCHAR pomáhá, když je nutné vynutit délku, a typ CHAR je vhodný pro krátké kódy s pevnou šířkou, jako jsou zkratky zemí.

Funkce DOUBLE je binární číslo s plovoucí desetinnou čárkou, takže opakované součty se posunou o zlomky centu. Funkce DECIMAL ukládá přesné hodnoty s danou přesností a měřítkem, což umožňuje reprodukovatelnost finančních součtů napříč běhy.

Jednoduché ČASOVÉ RAZÍTKO (TIMESTAMP) je bez časového pásma a je čteno zpět přesně tak, jak je zapsáno. Hive 3.1 přidal ČASOVÉ RAZÍTKO S MÍSTNÍM ČASOVÝM PÁSMEM (TIMESTAMP WITH LOCAL TIME ZONE), které normalizuje hodnotu na UTC při zápisu a převádí ji při čtení.

Ano. STRUCT se může nacházet uvnitř ARRAY a hodnota MAP může být sama o sobě STRUCT, takže ARRAY > platí v ÚlHluboké vnořování komplikuje oddělovače, proto ho udržujte mělké.

Ano. Nástroje pro profilování dat vzorkují mohutnost, míry nulových hodnot a rozsahy hodnot a poté navrhují nejužší funkční typ a formát souboru. Návrh považujte za koncept, protože model nevidí budoucí úlohy.

Copilot vytváří příkazy CREATE TABLE a CREATE DATABASE z krátkého komentáře a agenti mohou převést vzorový soubor do schématu. Před spuštěním výsledku vždy zkontrolujte stupnici DECIMAL a oddělovací klauzule.

Shrňte tento příspěvek takto: