Hive-datatyper: Hur man skapar och släpper databaser i Hive
⚡ Smart sammanfattning
Hive-datatyper definierar vad varje tabellkolumn kan innehålla, och kommandona CREATE DATABASE och DROP DATABASE konfigurerar eller tar bort namnrymden som dessa tabeller finns i inuti Hive-metaarkivet.

Datatyper är mycket viktiga element i Hive-frågespråk och datamodellering. För att definiera tabellkolumntyper måste vi känna till datatyperna och deras användning.
Följande ger en kort översikt över några datatyper som finns i Hive:
- Numeriska typer
- Strängtyper
- Typer av datum/tid
- Komplexa typer
Datatyper i Hive
Varje Hive-kolumn deklareras med en av typerna nedan. De primitiva familjerna kommer först, följt av de komplexa typerna som innehåller mer än ett värde i en enda kolumn.
Hive numeriska datatyper
Numeriska kolumner varierar från en enda byte till åtta byte, så att välja den minsta typen som passar värdena håller nere både lagrings- och skanningskostnaden.
| Typ | Minnesallokering |
|---|---|
| TINYINT | 1-byte signerat heltal (-128 till 127) |
| SMALLINT | 2-byte signerat heltal (-32,768 till 32,767) |
| INT | 4-byte signerat heltal (-2,147,483,648 till 2,147,483,647) |
| STORT | 8-byte signerat heltal (-9,223,372,036,854,775,808 till 9,223,372,036,854,775,807) |
| FLOTTÖR | 4-byte enkel precisionsflyttal |
| DUBBEL | 8-byte dubbel precisionsflyttal |
| DECIMAL | Vi kan definiera precision och skala i den här typen som DECIMAL(precision, skala). När de utelämnas använder Hive DECIMAL(10,0) |
Hive Strängdatatyper
Teckenkolumner finns i tre former, och skillnaden är om Hive tillämpar en deklarerad längd.
| Typ | Längd |
|---|---|
| RÖDING | Fast längd, upp till 255 tecken. Kortare värden fylls ut med mellanslag. |
| VARCHAR | 1 till 65 535 tecken. Ett längre värde avkortas tyst. |
| STRÄNG | Vi kan definiera längd här (ingen gräns) |
Hive datum/tid datatyper
Temporala kolumner lagras utan tidszonsförskjutning, vilket är värt att komma ihåg innan man jämför värden som skrivits av olika kluster.
| Typ | Användning |
|---|---|
| Tidsstämpel | Stöder traditionella Unix tidsstämpel med valfri nanosekundprecision |
| Datum | Den är i formatet ÅÅÅÅ-MM-DD. Värdeintervallet som stöds för datumtypen är 0000-01-01 till 9999-12-31, beroende på stödet från primitiven. Java typiskt datum |
Diverse datatyper i Hive
Två ytterligare primitiver står utanför de numeriska, sträng- och datumfamiljerna men förekommer regelbundet i verkliga scheman.
| Typ | Användning |
|---|---|
| BOOLEAN | Lagrar sant eller falskt |
| Binary | Lagrar en array med byte, vilket håller rått innehåll borta från en STRING-kolumn |
Hive komplexa datatyper
Komplexa typer kapslar värden i en kolumn, vilket tar bort den extra koppling som en relationsdesign skulle behöva.
| Typ | Användning |
|---|---|
| arrayer | ARRAY Negativa värden och icke-konstanta uttryck är inte tillåtna |
| kartor | KARTA Negativa värden och icke-konstanta uttryck är inte tillåtna |
| structs | STRUKTUR |
| Union | UNIONSTYP |
Exempel på komplexa Hive-datatyper
Tabellen ovan visar deklarationsformen. Satsen nedan placerar tre av de komplexa typerna i en tabell så att avgränsningsklausulerna och åtkomstsyntaxen kan ses tillsammans.
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;
Tre separata avgränsare behövs här: ett mellan kolumner, ett andra mellan elementen i en ARRAY eller STRUC, och ett tredje mellan en MAP-nyckel och dess värde. När tabellen finns läses varje komplex kolumn med sin egen accessor.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Tabellen nedan sammanfattar vilken accessor som tillhör vilken typ.
| Typ | Hur ett värde läses |
|---|---|
| ARRAY | Nollbaserat index, såsom färdigheter[0] |
| KARTA | Nyckelsökning inom hakparenteser, till exempel avdrag['skatt'] |
| STRUKT | Punktnotation på fältnamnet, till exempel adress.stad |
| UNIONSTYP | Används sällan, eftersom frågesupporten för den har förblivit ofullständig |
Komplexa typer kan kapslas, så ARRAY > är en giltig kolumndeklaration. När kolumnlayouten är fastställd byggs själva tabellerna med de satser som täcks av Hive skapar, ändrar och tar bort tabell.
Hur man skapar och släpper databaser i Hive
En databas i Hive är helt enkelt ett namnutrymme som grupperar tabeller, så det är det första objektet som skapas innan något tabellarbete påbörjas. Följande är stegen för hur man skapar och släpper databaser i Hive.
Steg 1) Skapa databas i Hive
För att skapa en databas i Hive-shell måste vi använda kommandot som visas i syntaxen nedan:
Syntax:
Create database <DatabaseName>
Exempel: Skapa databasen “guru99”
Skärmdumpen nedan visar create-kommandot följt av ett show-kommando som listar alla databaser i klustret.
Från skärmdumpen ovan gör vi två saker:
- Skapar databasen "guru99" i Hive
- Visa befintliga databaser med kommandot ”visa”
På samma skärm visas databasen "guru99" i slutet av när vi kör kommandot show, vilket betyder att databasen "guru99" har skapats.
Steg 2) Släpp databasen i Hive
För droppeping en databas i Hive-shell måste vi använda kommandot "drop" enligt syntaxen nedan:
Syntax:
Drop database <DatabaseName>
Exempel: Droppa databas guru99
I nästa skärmbild körs drop-kommandot först, och det efterföljande show-kommandot listar inte längre databasen.
I skärmdumpen ovan gör vi två saker:
- Vi är droppping databasen 'guru99' från Hive
- Korskolla samma sak med kommandot "visa"
På samma skärm, efter att ha kontrollerat databaserna med kommandot show, visas inte databasen "guru99" i Hive. Så vi kan nu bekräfta att databasen "guru99" har tagits bort.
Hive-databaskommandon: ANVÄND, BESKRIV, VISA och ÄNDRA DATABAS
De två ovanstående uttrycken använder sin kortaste form. Den dokumenterade syntaxen innehåller valfria klausuler som avgör var filerna hamnar och vad som händer när namnet redan är upptaget.
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];
Nyckelorden DATABASE och SCHEMA är utbytbara genomgående, så CREATE SCHEMA och CREATE DATABASE gör exakt samma sak. De återstående kommandona kompletterar det dagliga arbetet med ett namnutrymme.
| Kommando | Vad den gör |
|---|---|
| VISA DATABASER; | Listar alla databaser som är registrerade i metaarkivet |
| ANVÄND databasnamn; | Ställer in den aktuella databasen så att tabellnamn inte behöver något prefix |
| BESKRIV DATABAS databasnamn; | Rapporterar kommentaren, HDFS-platsen och ägaren |
| BESKRIV DATABAS UTÖKAD databasnamn; | Lägger till DBPROPERTIES nyckel-värdepar till den utdata |
| ÄNDRING DATABASE databasnamn SET DBEGENSKAPER (…); | Lägger till eller ersätter metadataegenskaper |
| ÄNDRA DATABASE databasnamn SET ÄGARE ANVÄNDARE användarnamn; | Överför ägarskap till en annan användare eller roll |
| ÄNDRING DATABAS databasnamn ANGE PLATS hdfs_sökväg; | Ändrar sökvägen som används av tabeller som skapats från och med då |
Två standardvärden är värda att memorera. Utan en LOCATION-klausul finns filerna under warehouse-katalogen, normalt /user/hive/warehouse/database_name.db, och utan IF EXISTS genererar en överföring mot ett saknat namn ett fel istället för att skickas tyst. Båda inställningarna behålls i Hive metastore.
Hive-datatypkonvertering och vanliga fel
Typer används inte alltid exakt som de deklarerat. Hive breddar ett värde automatiskt när ingen information kan gå förlorad och överlåter allt annat till en explicit konvertering.
- Implicit breddning följer kedjan TINYINT till SMALLINT till INT till BIGINT till FLOAT till DOUBLE, och en STRING som innehåller siffror uppgraderas till DOUBLE.
- Förträngning sker aldrig av sig själv, så en DOUBLE som tilldelas en INT-kolumn behöver en skriftlig konvertering.
- CAST utför den skrivna konverteringen och returnerar NULL snarare än ett fel när värdet inte kan konverteras.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Felen nedan står för de flesta av de överraskningar som nybörjare stöter på i sitt första schema.
| Symptom | Orsak och åtgärd |
|---|---|
| Avregistreringen misslyckas medan databasen fortfarande innehåller tabeller | RESTRICT är standardinställningen. Lägg till CASCADE för att ta bort tabellerna med den. |
| En lång sträng anländer förkortad | VARCHAR avkortar tyst förbi sin deklarerade längd. Använd STRING när ingen gräns önskas. |
| En kolumn läses som NULL efter en konvertering | CAST kunde inte analysera värdet. Kontrollera källdata innan typen breddas. |
| Valutavärden förlorar sina pais eller cent | DECIMAL utan argument betyder DECIMAL(10,0). Ange skalan explicit |
| Två identiskt utseende datum matchar aldrig | En STRING-datumkolumn och en DATE-kolumn är olika typer. Jämför från ena sidan innan du jämför. |
När typerna beter sig är nästa steg att ladda och fråga själva data, vilket behandlas i Hive-frågor med Sortera efter, Gruppera efter och Cluster By.


