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.


