Hive-datatyper: Hvordan lage og slippe databaser i Hive
⚡ Smart oppsummering
Hive-datatyper definerer hva hver tabellkolonne kan inneholde, og kommandoene CREATE DATABASE og DROP DATABASE setter opp eller fjerner navneområdet disse tabellene befinner seg i i Hive-metastoren.

Datatyper er svært viktige elementer i Hive-spørrespråket og datamodelleringen. For å definere tabellkolonnetyper må vi kjenne til datatypene og bruken av dem.
Følgende gir en kort oversikt over noen datatyper som finnes i Hive:
- Numeriske typer
- Strengetyper
- Dato/klokkesletttyper
- Komplekse typer
Datatyper i Hive
Hver Hive-kolonne deklareres med en av typene nedenfor. De primitive familiene kommer først, etterfulgt av de komplekse typene som inneholder mer enn én verdi i en enkelt kolonne.
Hive numeriske datatyper
Numeriske kolonner varierer fra én byte til åtte byte, så å velge den minste typen som passer til verdiene holder både lagrings- og skannekostnadene nede.
| typen | Minneallokering |
|---|---|
| TINYINT | 1-byte signert heltall (-128 til 127) |
| SMALLINT | 2-byte signert heltall (-32,768 til 32,767) |
| INT | 4-byte signert heltall (-2,147,483,648 til 2,147,483,647) |
| STORT | 8-byte signert heltall (-9,223,372,036,854,775,808 til 9,223,372,036,854,775,807) |
| FLOAT | 4-byte enkelt presisjonsflyttall |
| DOBBELT | 8-byte dobbel presisjonsflyttall |
| DESIMAL | Vi kan definere presisjon og skala i denne typen som DECIMAL(presisjon, skala). Når de utelates, bruker Hive DECIMAL(10,0) |
Hive-strengdatatyper
Tegnkolonner finnes i tre former, og forskjellen er om Hive håndhever en deklarert lengde.
| typen | Lengde |
|---|---|
| CHAR | Fast lengde, opptil 255 tegn. Kortere verdier fylles ut med mellomrom. |
| VARCHAR | 1 til 65 535 tegn. En lengre verdi blir avkortet i stillhet. |
| STRING | Vi kan definere lengde her (ingen grense) |
Hive Dato/Tid-datatyper
Midlertidige kolonner lagres uten tidssoneforskyvning, noe som er verdt å huske på før man sammenligner verdier skrevet av forskjellige klynger.
| typen | bruk |
|---|---|
| Tidsstempel | Støtter tradisjonelle Unix tidsstempel med valgfri nanosekund-presisjon |
| Dato | Den er i formatet ÅÅÅÅ-MM-DD. Verdiområdet som støttes for datotypen er 0000-01-01 til 9999-12-31, avhengig av støtten fra primitivet. Java typisk dato |
Diverse datatyper i Hive
To ytterligere primitiver sitter utenfor tall-, streng- og datofamiliene, men vises regelmessig i virkelige skjemaer.
| typen | bruk |
|---|---|
| boolsk | Lagrer sant eller usant |
| BINARY | Lagrer en rekke byte, som holder rått innhold ute av en STRING-kolonne |
Hive komplekse datatyper
Komplekse typer nester verdier i én kolonne, noe som fjerner den ekstra sammenføyningen som et relasjonelt design ville trenge.
| typen | bruk |
|---|---|
| arrays | ARRAY Negative verdier og ikke-konstante uttrykk er ikke tillatt |
| Kart | KART Negative verdier og ikke-konstante uttrykk er ikke tillatt |
| Strukturer | STRUKTUR |
| Union | UNIONSTYPE |
Eksempel på komplekse Hive-datatyper
Tabellen ovenfor viser deklarasjonsformen. Utsagnet nedenfor setter tre av de komplekse typene i én tabell, slik at skilleklausulene og tilgangssyntaksen kan sees sammen.
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 separate skilletegn er nødvendig her: ett mellom kolonner, et andre mellom elementene i en ARRAY eller STRUC, og et tredje mellom en MAP-nøkkel og dens verdi. Når tabellen finnes, leses hver kompleks kolonne med sin egen aksessor.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Tabellen nedenfor oppsummerer hvilken aksessor som tilhører hvilken type.
| typen | Hvordan en verdi leses |
|---|---|
| ARRAY | Nullbasert indeks, som ferdigheter[0] |
| MAP | Nøkkeloppslag i hakeparenteser, for eksempel fradrag['skatt'] |
| STRUKT | Punktnotasjon på feltnavnet, for eksempel adresse.by |
| UNIONSTYPE | Sjelden brukt, fordi spørrestøtten for den har vært ufullstendig |
Komplekse typer kan være nestet, så ARRAY > er en gyldig kolonnedeklarasjon. Når kolonneoppsettet er avgjort, bygges selve tabellene med setningene som er dekket i Hive oppretter, endrer og sletter tabeller.
Hvordan lage og slippe databaser i Hive
En database i Hive er rett og slett et navnerom som grupperer tabeller, så det er det første objektet som opprettes før noe tabellarbeid starter. Følgende er trinnene for hvordan du oppretter og sletter databaser i Hive.
Trinn 1) Opprett database i Hive
For å opprette en database i Hive-shellet, må vi bruke kommandoen som vist i syntaksen nedenfor:
Syntaks:
Create database <DatabaseName>
Eksempel: Opprett databasen «guru99»
Skjermbildet nedenfor viser create-setningen etterfulgt av en show-kommando som viser alle databasene i klyngen.
Fra skjermbildet ovenfor gjør vi to ting:
- Oppretter database "guru99" i Hive
- Vise eksisterende databaser ved hjelp av kommandoen «vis»
På samme skjerm vises databasen «guru99» på slutten når vi utfører show-kommandoen, som betyr at databasen «guru99» er opprettet.
Trinn 2) Slipp databasen i Hive
For slippping en database i Hive-shell, må vi bruke «drop»-kommandoen som vist i syntaksen nedenfor:
Syntaks:
Drop database <DatabaseName>
Eksempel: Slett database guru99
I neste skjermbilde kjøres drop-setningen først, og show-kommandoen som følger viser ikke lenger databasen.
I skjermbildet ovenfor gjør vi to ting:
- Vi er droppping databasen 'guru99' fra Hive
- Kryssjekk det samme med «vis»-kommandoen
På samme skjermbilde, etter å ha sjekket databasene med show-kommandoen, vises ikke databasen «guru99» i Hive. Så vi kan nå bekrefte at databasen «guru99» er slettet.
Hive-databasekommandoer: BRUK, BESKRIV, VIS og ENDR DATABASE
De to setningene ovenfor bruker sin korteste form. Den dokumenterte syntaksen inneholder valgfrie klausuler som bestemmer hvor filene havner og hva som skjer når navnet allerede er tatt.
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];
Nøkkelordene DATABASE og SCHEMA er utskiftbare gjennomgående, så CREATE SCHEMA og CREATE DATABASE gjør akkurat det samme. De resterende kommandoene avrunder det daglige arbeidet med et navnerom.
| Kommando | Hva det gjør |
|---|---|
| VIS DATABASER; | Viser alle databaser som er registrert i metastoren |
| BRUK databasenavn; | Angir gjeldende database slik at tabellnavn ikke trenger prefiks |
| BESKRIV DATABASE databasenavn; | Rapporterer kommentaren, HDFS-plasseringen og eieren |
| BESKRIV DATABASE UTVIDET databasenavn; | Legger til DBPROPERTIES nøkkelverdipar til den utdataene |
| ENDRE DATABASE database_navn ANGI DBEGENSKAPER (…); | Legger til eller erstatter metadataegenskaper |
| ENDRE DATABASE database_navn ANGI EIER BRUKER bruker_navn; | Overfører eierskap til en annen bruker eller rolle |
| ENDRE DATABASE database_navn ANGI PLASSERING hdfs_sti; | Endrer banen som brukes av tabeller som er opprettet fra da av |
To standardinnstillinger er verdt å huske. Uten en LOCATION-klausul ligger filene under lagerkatalogen, vanligvis /user/hive/warehouse/database_name.db, og uten IF EXISTS genererer en feilmelding en mot et manglende navn i stedet for å gå stille. Begge innstillingene beholdes i Hive-metabutikk.
Hive-datatypekonvertering og vanlige feil
Typer brukes ikke alltid nøyaktig som deklarert. Hive utvider en verdi automatisk når ingen informasjon kan gå tapt, og overlater alt annet til en eksplisitt konvertering.
- Implisitt utvidelse følger kjeden TINYINT til SMALLINT til INT til BIGINT til FLOAT til DOUBLE, og en STRING som inneholder sifre forfremmes til DOUBLE.
- Innsnevring skjer aldri av seg selv, så en DOUBLE som er tilordnet en INT-kolonne, trenger en skriftlig konvertering.
- CAST utfører den skrevne konverteringen, og den returnerer NULL i stedet for en feil når verdien ikke kan konverteres.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Feilene nedenfor forklarer de fleste overraskelsene nybegynnere møter på sitt første skjema.
| Symptom | Årsak og løsning |
|---|---|
| Slettingen mislykkes mens databasen fortsatt inneholder tabeller | RESTRICT er standardinnstillingen. Legg til CASCADE for å fjerne tabellene med den. |
| En lang streng ankommer forkortet | VARCHAR avkortes stille forbi den deklarerte lengden. Bruk STRING når ingen grense er ønsket. |
| En kolonne leses som NULL etter en konvertering | CAST kunne ikke analysere verdien. Sjekk kildedataene før du utvider typen. |
| Valutaverdier mister sine paiser eller cent | DESIMAL uten argumenter betyr DESIMAL(10,0). Angi skalaen eksplisitt |
| To identisk utseende datoer stemmer aldri overens | En STRING-datokolonne og en DATE-kolonne er forskjellige typer. Kast den ene siden før du sammenligner. |
Når typene oppfører seg, er neste trinn å laste inn og spørre selve dataene, som dekkes i Hive-spørringer med Sorter etter, Grupper etter og Cluster By.


