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.

  • ๐Ÿ”ข Numeriske typer: TINYINT til BIGINT dekker hele tall, mens DECIMAL(presisjon, skala) beholder eksakte verdier som FLOAT og DOUBLE ikke kan.
  • ๐Ÿ”ค Strengtyper: STRING har ingen deklarert grense, VARCHAR godtar 1 til 65 535 tegn, og CHAR er fastsatt til opptil 255.
  • ๐Ÿ“… Dato og tid: DATE lagrer en vanlig YYYY-MM-DD-verdi, og TIMESTAMP legger til valgfri nanosekundpresisjon i tillegg.
  • ๐Ÿงฉ Komplekse typer: ARRAY, MAP, STRUCT og UNIONTYPE pakker flere relaterte verdier inn i รฉn kolonne i stedet for mange.
  • ๐Ÿ—๏ธ Opprett en database: CREATE DATABASE registrerer et navneomrรฅde i metastoren, og SHOW DATABASES bekrefter at det finnes.
  • ๐Ÿ—‘๏ธ Slett en database: DROP DATABASE fjerner navnerommet, og CASCADE er nรธdvendig nรฅr tabeller fortsatt finnes i det.

Hive-datatyper og hvordan du oppretter og sletter databaser i Hive

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.

Hive-shell oppretter guru99-databasen og lister databaser med show

Fra skjermbildet ovenfor gjรธr vi to ting:

  1. Oppretter database "guru99" i Hive
  2. 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.

Hive skalldrรฅpeping guru99-databasen og bekrefter fjerning med show

I skjermbildet ovenfor gjรธr vi to ting:

  1. Vi er droppping databasen 'guru99' fra Hive
  2. 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.

Spรธrsmรฅl og svar

Nei. DATABASE og SCHEMA er utskiftbare nรธkkelord i HiveQL, sรฅ CREATE SCHEMA sales og CREATE DATABASE sales produserer det samme metastore-objektet. Valget er utelukkende et spรธrsmรฅl om husstil.

Under lagerkatalogen, vanligvis /user/hive/warehouse/database_name.db pรฅ HDFS. En LOCATION-klausul pรฅ CREATE DATABASE overstyrer den banen, og DESCRIBE DATABASE rapporterer hvilken plassering som faktisk ble brukt.

STRING er det vanlige valget fordi det ikke har noen deklarert grense og ikke trenger utfylling. VARCHAR hjelper nรฅr en lengde mรฅ hรฅndheves, og CHAR passer til korte koder med fast bredde, som for eksempel landsforkortelser.

DOUBLE er binรฆr flyttall, sรฅ gjentatte summer avviker med brรธkdeler av en cent. DESIMAL lagrer eksakte verdier med en gitt presisjon og skala, noe som gjรธr รธkonomiske totaler reproduserbare pรฅ tvers av kjรธringer.

Et vanlig TIMESTAMP er tidssonefritt og leses tilbake nรธyaktig som skrevet. Hive 3.1 la til TIMESTAMP MED LOKAL TIDSSONE, som normaliserer verdien til UTC ved skriving og konverterer den ved lesing.

Ja. En STRUCTS kan ligge i en ARRAY, og en MAP-verdi kan i seg selv vรฆre en STRUCTS, sรฅ ARRAY > er gyldig i HiveDyp nesting kompliserer skilletegn, sรฅ hold det overfladisk.

Ja. Dataprofileringsverktรธy tar prรธver av kardinalitet, nullrater og verdiomrรฅder, og foreslรฅr deretter den smaleste brukbare typen og et filformat. Behandle forslaget som et utkast, fordi modellen ikke kan se fremtidige arbeidsbelastninger.

Copilot utkaster CREATE TABLE- og CREATE DATABASE-setninger fra en kort kommentar, og agentassistenter kan konvertere en eksempelfil til et skjema. Sjekk alltid DECIMAL-skalaen og skilletegnklausulene fรธr du kjรธrer resultatet.

Oppsummer dette innlegget med: