Hive-datatyper: Sådan oprettes og droppes databaser i Hive

⚡ Smart opsummering

Hive-datatyper definerer, hvad hver tabelkolonne kan indeholde, og kommandoerne CREATE DATABASE og DROP DATABASE opretter eller fjerner det navneområde, som disse tabeller findes i, inde i Hive-metastoren.

  • 🔢 Numeriske typer: TINYINT til BIGINT dækker hele tal, mens DECIMAL(præcision, skala) beholder nøjagtige værdier, hvilket FLOAT og DOUBLE ikke kan.
  • 🔤 Strengtyper: STRING har ingen deklareret grænse, VARCHAR accepterer 1 til 65535 tegn, og CHAR er fastsat til op til 255.
  • 📅 Dato og tid: DATE gemmer en almindelig YYYY-MM-DD-værdi, og TIMESTAMP tilføjer valgfri nanosekundspræcision oveni.
  • 🧩 Komplekse typer: ARRAY, MAP, STRUCT og UNIONTYPE pakker flere relaterede værdier i én kolonne i stedet for mange.
  • 🏗️ Opret en database: CREATE DATABASE registrerer et navneområde i metastoren, og SHOW DATABASES bekræfter, at det eksisterer.
  • 🗑️ Slip en database: DROP DATABASE fjerner navneområdet, og CASCADE er påkrævet, når der stadig er tabeller i det.

Hive-datatyper og hvordan man opretter og sletter databaser i Hive

Datatyper er meget vigtige elementer i Hive-forespørgselssprog og datamodellering. For at definere tabelkolonnetyper skal vi have kendskab til datatyperne og deres anvendelse.

Følgende giver en kort oversigt over nogle datatyper, der findes i Hive:

  • Numeriske typer
  • Strengtyper
  • Dato/klokkeslætstyper
  • Komplekse typer

Datatyper i Hive

Hver Hive-kolonne er deklareret med en af ​​typerne nedenfor. De primitive familier kommer først, efterfulgt af de komplekse typer, der indeholder mere end én værdi i en enkelt kolonne.

Hive numeriske datatyper

Numeriske kolonner spænder fra en enkelt byte til otte bytes, så at vælge den mindste type, der passer til værdierne, holder både lager- og scanningsomkostningerne nede.

Type Hukommelsestildeling
TINYINT 1-byte signeret heltal (-128 til 127)
SMALLINT 2-byte signeret heltal (-32,768 til 32,767)
INT 4-byte signeret heltal (-2,147,483,648 til 2,147,483,647)
STORT 8-byte signeret heltal (-9,223,372,036,854,775,808 til 9,223,372,036,854,775,807)
FLOAT 4-byte enkelt præcisions flydende kommatal
DOBBELT 8-byte dobbelt præcisions flydende kommatal
DECIMAL Vi kan definere præcision og skala i denne type som DECIMAL(præcision, skala). Når de udelades, bruger Hive DECIMAL(10,0)

Hive-strengdatatyper

Tegnkolonner findes i tre former, og forskellen er, om Hive håndhæver en deklareret længde.

Type Længde
CHAR Fast længde, op til 255 tegn. Kortere værdier udfyldes med mellemrum
VARCHAR 1 til 65,535 tegn. En længere værdi afkortes lydløst
STRING Vi kan definere længden her (ingen grænse)

Hive Dato/Tid Datatyper

Midlertidige kolonner gemmes uden tidszoneforskydning, hvilket er værd at huske på, før man sammenligner værdier skrevet af forskellige klynger.

Type Brug
Timestamp Understøtter traditionelle Unix tidsstempel med valgfri nanosekund præcision
Dato Den er i formatet ÅÅÅÅ-MM-DD.
Det understøttede værdiinterval for datotypen er 0000-01-01 til 9999-12-31, afhængigt af understøttelsen fra primitiven. Java typisk dato

Diverse Hive-datatyper

To yderligere primitiver ligger uden for de numeriske, streng- og datofamilier, men optræder regelmæssigt i virkelige skemaer.

Type Brug
BOOLESK Gemmer sandt eller falsk
Binary Gemmer et array af bytes, hvilket holder råt indhold ude af en STRING-kolonne

Hive komplekse datatyper

Komplekse typer indlejrer værdier i én kolonne, hvilket fjerner den ekstra join, som et relationelt design ville have brug for.

Type Brug
Arrays ARRA
Negative værdier og ikke-konstante udtryk er ikke tilladt
Maps KORT
Negative værdier og ikke-konstante udtryk er ikke tilladt
Strukturer STRUKTUR
Union UNIONSTYPE

Eksempel på komplekse Hive-datatyper

Tabellen ovenfor viser deklarationsformen. Sætningen nedenfor sætter tre af de komplekse typer i én tabel, så afgrænsningsklausulerne og adgangssyntaksen kan ses 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 afgrænsere er nødvendige her: en mellem kolonner, en anden mellem elementerne i et ARRAY eller en STRUCTS, og en tredje mellem en MAP-nøgle og dens værdi. Når tabellen findes, læses hver kompleks kolonne med sin egen accessor.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

Tabellen nedenfor opsummerer, hvilken accessor der tilhører hvilken type.

Type Hvordan en værdi aflæses
ARRA Nulbaseret indeks, såsom færdigheder[0]
MAP Nøgleopslag i firkantede parenteser, såsom fradrag['skat']
STRUKT Punktumnotation på feltnavnet, f.eks. adresse.by
UNIONSTYPE Bruges sjældent, fordi forespørgselsunderstøttelsen til den har været ufuldstændig

Komplekse typer kan indlejres, så ARRAY > er en gyldig kolonnedeklaration. Når kolonnelayoutet er fastlagt, bygges selve tabellerne med de udsagn, der er dækket i Opret, rediger og slet tabel i Hive.

Sådan opretter og dropper du databaser i Hive

En database i Hive er simpelthen et navnerum, der grupperer tabeller, så det er det første objekt, der oprettes, før noget tabelarbejde begynder. Følgende er trinnene til, hvordan du opretter og sletter databaser i Hive.

Trin 1) Opret database i Hive

For at oprette en database i Hive Shell skal vi bruge kommandoen som vist i syntaksen nedenfor:

Syntaks:

Create database <DatabaseName>

Eksempel: Opret databasen “guru99”

Skærmbilledet nedenfor viser create-kommandoen efterfulgt af en show-kommando, der viser alle databaser i klyngen.

Hive shell opretter guru99-databasen og viser databaser med show

Ud fra ovenstående skærmbillede gør vi to ting:

  1. Oprettelse af database "guru99" i Hive
  2. Visning af eksisterende databaser ved hjælp af kommandoen "show"

På samme skærm vises databasen “guru99” til sidst, når vi udfører show-kommandoen, hvilket betyder, at databasen “guru99” er oprettet.

Trin 2) Drop databasen i Hive

Til dropping en database i Hive shell, skal vi bruge kommandoen "drop" som vist i syntaksen nedenfor:

Syntaks:

Drop database <DatabaseName>

Eksempel: Drop database guru99

I det næste skærmbillede køres drop-sætningen først, og den efterfølgende show-kommando viser ikke længere databasen.

Dråbe af bistadeskalping guru99-databasen og bekræftelse af fjernelse med show

I skærmbilledet ovenfor gør vi to ting:

  1. Vi er faldetping databasen 'guru99' fra Hive
  2. Krydstjek det samme med kommandoen "vis"

På samme skærm, efter at have kontrolleret databaserne med show-kommandoen, vises databasen "guru99" ikke i Hive. Så vi kan nu bekræfte, at databasen "guru99" er slettet.

Hive-databasekommandoer: BRUG, BESKRIV, VIS og ÆNDRE DATABASE

De to ovenstående udsagn bruger deres korteste form. Den dokumenterede syntaks indeholder valgfrie klausuler, der bestemmer, hvor filerne lander, og hvad der sker, når navnet allerede er optaget.

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øgleordene DATABASE og SCHEMA kan bruges i samme rækkefølge, så CREATE SCHEMA og CREATE DATABASE gør præcis det samme. De resterende kommandoer fuldender det daglige arbejde med et navnerum.

Kommando Hvad gør den
VIS DATABASER; Viser en liste over alle databaser, der er registreret i metastoren
BRUG databasenavn; Indstiller den aktuelle database, så tabelnavne ikke behøver præfiks
BESKRIV DATABASE database_navn; Rapporterer kommentaren, HDFS-placeringen og ejeren
BESKRIV DATABASEUDVIDET databasenavn; Tilføjer DBPROPERTIES nøgle-værdi-parrene til det pågældende output
ÆNDR DATABASE database_navn SÆT DBEGENSKABER (…); Tilføjer eller erstatter metadataegenskaber
ÆNDR DATABASE database_navn SÆT EJER BRUGER bruger_navn; Overfører ejerskab til en anden bruger eller rolle
ÆNDR DATABASE database_navn ANGIV PLACERING hdfs_sti; Ændrer den sti, der bruges af tabeller, der er oprettet fra da af

To standardindstillinger er værd at huske. Uden en LOCATION-klausul ligger filerne under warehouse-mappen, normalt /user/hive/warehouse/database_name.db, og uden IF EXISTS genererer et drop mod et manglende navn en fejl i stedet for at ske stille og roligt. Begge indstillinger bevares i Hive-metastore.

Hive-datatypekonvertering og almindelige fejl

Typer bruges ikke altid præcis som deklareret. Hive udvider automatisk en værdi, når ingen information kan gå tabt, og overlader alt andet til en eksplicit konvertering.

  • Implicit udvidelse følger kæden TINYINT til SMALLINT til INT til BIGINT til FLOAT til DOUBLE, og en STRING, der indeholder cifre, forfremmes til DOUBLE.
  • Indsnævring sker aldrig af sig selv, så en DOUBLE tildelt en INT-kolonne kræver en skriftlig konvertering.
  • CAST udfører den skrevne konvertering, og den returnerer NULL i stedet for en fejl, når værdien ikke kan konverteres.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Fejlene nedenfor forklarer de fleste af de overraskelser, som begyndere møder på deres første skema.

Symptom Årsag og løsning
Dropning mislykkes, mens databasen stadig indeholder tabeller RESTRICT er standardindstillingen. Tilføj CASCADE for at slette tabellerne med den.
En lang streng ankommer forkortet VARCHAR afkorter lydløst ud over sin deklarerede længde. Brug STRING, når der ikke ønskes nogen grænse.
En kolonne læses som NULL efter en konvertering CAST kunne ikke analysere værdien. Kontroller kildedataene, før typen udvides.
Valutaværdier mister deres paise eller cents DECIMAL uden argumenter betyder DECIMAL(10,0). Angiv skalaen eksplicit
To identisk udseende datoer matcher aldrig En STRING-datokolonne og en DATE-kolonne er forskellige typer. Kast den ene side, før du sammenligner.

Når typerne opfører sig korrekt, er næste trin at indlæse og forespørge selve dataene, hvilket er dækket i Hive-forespørgsler med Sortér efter, Gruppér efter og Cluster By.

Ofte Stillede Spørgsmål

Nej. DATABASE og SCHEMA er udskiftelige nøgleord i HiveQL, så CREATE SCHEMA sales og CREATE DATABASE sales producerer det samme metastore-objekt. Valget er udelukkende et spørgsmål om husstil.

Under warehouse-mappen, normalt /user/hive/warehouse/database_name.db på HDFS. En LOCATION-klausul på CREATE DATABASE tilsidesætter denne sti, og DESCRIBE DATABASE rapporterer, hvilken placering der rent faktisk blev brugt.

STRING er det sædvanlige valg, fordi det ikke har nogen deklareret grænse og ikke kræver nogen margen. VARCHAR hjælper, når en længde skal håndhæves, og CHAR passer til korte koder med fast bredde, såsom landeforkortelser.

DOUBLE er et binært flydende komma, så gentagne summer afviger med brøkdele af en cent. DECIMAL gemmer nøjagtige værdier med en bestemt præcision og skala, hvilket sikrer, at de økonomiske totaler kan reproduceres på tværs af kørsler.

Et almindeligt TIMESTAMP er tidszonefrit og læses tilbage præcis som skrevet. Hive 3.1 tilføjede TIMESTAMP MED LOKAL TIDZONE, som normaliserer værdien til UTC ved skrivning og konverterer den ved læsning.

Ja. En STRUCTS kan være placeret i et ARRAY, og en MAP-værdi kan i sig selv være en STRUCTS, så ARRAY > er gyldig i HiveDyb indlejring komplicerer afgrænsningstegn, så hold det overfladisk.

Ja. Dataprofileringsværktøjer sampler kardinalitet, nulhastigheder og værdiintervaller og foreslår derefter den smalleste brugbare type og et filformat. Behandl forslaget som et udkast, da modellen ikke kan se fremtidige arbejdsbelastninger.

Copilot udkaster CREATE TABLE- og CREATE DATABASE-sætninger fra en kort kommentar, og agentassistenter kan konvertere en eksempelfil til et skema. Kontroller altid DECIMAL-skalaen og afgrænserklausulerne, før du kører resultatet.

Opsummer dette indlæg med: