Hiven tietotyypit: Tietokantojen luominen ja pudottaminen Hiveen

⚡ Älykäs yhteenveto

Hive-tietotyypit määrittävät, mitä kukin taulukon sarake voi sisältää, ja CREATE DATABASE- ja DROP DATABASE -komennot määrittävät tai poistavat nimiavaruuden, jossa kyseiset taulukot sijaitsevat Hive-metastoressa.

  • 🔢 Numeeriset tyypit: TINYINT - BIGINT kattavat kokonaisluvut, kun taas DECIMAL(tarkkuus, skaala) säilyttää tarkat arvot, joita FLOAT ja DOUBLE eivät pysty säilyttämään.
  • 🔤 Merkkijonotyypit: STRING-muuttujalla ei ole ennalta määrättyä rajoitusta, VARCHAR hyväksyy 1–65 535 merkkiä ja CHAR on kiinteä enintään 255 merkkiä.
  • 📅 Päivämäärä ja aika: DATE tallentaa pelkän VVVV-KK-PP-arvon ja TIMESTAMP lisää siihen valinnaisen nanosekunnin tarkkuuden.
  • 🧩 Monimutkaiset tyypit: ARRAY, MAP, STRUCT ja UNIONTYPE pakkaavat useita toisiinsa liittyviä arvoja yhteen sarakkeeseen useiden sijaan.
  • 🏗️ Luo tietokanta: CREATE DATABASE rekisteröi nimiavaruuden metastoreen ja SHOW DATABASES vahvistaa, että se on olemassa.
  • 🗑️ Tietokannan pudottaminen: DROP DATABASE poistaa nimiavaruuden, ja CASCADE-käskyä tarvitaan aina, kun sen sisällä on vielä taulukoita.

Hiven tietotyypit ja tietokantojen luominen ja poistaminen Hivessä

Tietotyypit ovat erittäin tärkeitä elementtejä Hive-kyselykielessä ja datamallinnuksessa. Taulukon saraketyyppien määrittämiseksi meidän on tiedettävä tietotyypit ja niiden käyttö.

Seuraavassa on lyhyt katsaus joihinkin Hivessä oleviin tietotyyppeihin:

  • Numeeriset tyypit
  • Merkkijonotyypit
  • Päivämäärä/aika tyypit
  • Monimutkaiset tyypit

Hiven tietotyypit

Jokainen Hive-sarake deklaroidaan jollakin alla olevista tyypeistä. Ensin tulevat alkeelliset perheet, ja sitten monimutkaiset tyypit, jotka sisältävät useamman kuin yhden arvon yhdessä sarakkeessa.

Hiven numeeriset tietotyypit

Numeeriset sarakkeet vaihtelevat yhdestä tavusta kahdeksaan tavuun, joten pienimmän arvoihin sopivan tyypin valitseminen pitää sekä tallennus- että skannauskustannukset alhaisina.

Tyyppi Muistin allokointi
TINYINT 1-tavuinen etumerkillinen kokonaisluku (-128 - 127)
PIENI 2-tavuinen etumerkillinen kokonaisluku (-32,768 - 32,767)
INT 4-tavuinen etumerkillinen kokonaisluku (-2,147,483,648 - 2,147,483,647)
BIGINT 8-tavuinen etumerkillinen kokonaisluku (-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807)
FLOAT 4-tavuinen yhden tarkkuuden liukuluku
KAKSINKERTAINEN 8-tavuinen kaksinkertaisen tarkkuuden liukuluku
DECIMAL Voimme määritellä tarkkuuden ja skaalauksen tässä tyypissä muodossa DECIMAL(tarkkuus, skaala). Kun ne jätetään pois, Hive käyttää DECIMAL(10,0)-muotoa.

Hive-merkkijonotietotyypit

Merkkisarakkeita on kolmenlaisia, ja ero on siinä, valvooko Hive ilmoitettua pituutta.

Tyyppi Pituus
HIILTYÄ Kiinteä pituus, enintään 255 merkkiä. Lyhyemmät arvot täytetään välilyönneillä.
VARCHAR 1–65 535 merkkiä. Pidempi arvo katkaistaan ​​hiljaisesti.
STRING Voimme määritellä pituuden tässä (ei rajoitusta)

Hiven päivämäärä/aika -tietotyypit

Aikasarakkeet tallennetaan ilman aikavyöhykepoikkeamaa, mikä on syytä muistaa ennen eri klustereiden kirjoittamien arvojen vertailua.

Tyyppi Käyttö
Aikaleima Tukee perinteistä unix aikaleima valinnaisella nanosekunnin tarkkuudella
Päivämäärä Se on muodossa VVVV-KK-PP.
Päivämäärätyypin tuettu arvoalue on 0000-01-01 - 9999-12-31 primitiivin tuesta riippuen. Java tyypillinen päivämäärä

Hiven sekalaiset tietotyypit

Kaksi muuta primitiiviä sijaitsee numeeristen, merkkijonojen ja päivämääräryhmien ulkopuolella, mutta esiintyvät säännöllisesti todellisissa skeemoissa.

Tyyppi Käyttö
BOOLEN Tallentaa tosi- tai epätosi-arvon
BINÄÄRI Tallentaa tavutaulukon, joka pitää raakasisällön poissa STRING-sarakkeesta

Hiven monimutkaiset tietotyypit

Monimutkaiset tyypit sisäkkäin sijoittavat arvot yhden sarakkeen sisään, mikä poistaa relaatiosuunnittelussa tarvittavan ylimääräisen liitoksen.

Tyyppi Käyttö
taulukot ARRAY
Negatiiviset arvot ja epävakiolausekkeet eivät ole sallittuja
Kartat KARTTA
Negatiiviset arvot ja epävakiolausekkeet eivät ole sallittuja
structs RAKENNE
Liitto UNIONITYYPPI

Esimerkki kompleksisista Hive-tietotyypeistä

Yllä oleva taulukko antaa määrittelymuodon. Alla oleva lauseke yhdistää kolme monimutkaista tyyppiä yhteen taulukkoon, jotta erotinlausekkeet ja käyttöoikeussyntaksi voidaan nähdä yhdessä.

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;

Tässä tarvitaan kolme erillistä erotinta: yksi sarakkeiden välille, toinen ARRAY- tai STRUCT-taulukon alkioiden välille ja kolmas MAP-avaimen ja sen arvon välille. Kun taulukko on olemassa, jokainen kompleksisarake luetaan omalla aksessorilla.

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

Alla oleva taulukko yhteenvetää, mikä aksessori kuuluu mihinkin tyyppiin.

Tyyppi Miten arvo luetaan
ARRAY Nollapohjainen indeksi, kuten taidot[0]
MAP Hakasulkeissa oleva avainhaku, kuten vähennykset['vero']
RAKENNE Kentän nimen pistemerkintä, kuten osoite.kaupunki
UNIONITYYPPI Harvoin käytetty, koska sen kyselytuki on jäänyt puutteelliseksi

Monimutkaiset tyypit voivat olla sisäkkäisiä, joten ARRAY > on kelvollinen sarakemäärittely. Kun sarakeasettelu on määritetty, itse taulukot rakennetaan kohdassa käsitellyillä lauseilla. Hiven luonti, muokkaus ja pudotustaulukko.

Tietokantojen luominen ja pudottaminen Hiveen

Hive-tietokanta on yksinkertaisesti nimiavaruus, joka ryhmittelee taulukoita, joten se on ensimmäinen luotava objekti ennen taulukkotyöskentelyn aloittamista. Seuraavassa on vaiheet tietokantojen luomiseen ja poistamiseen Hivessä.

Vaihe 1) Luo tietokanta Hiveen

Tietokannan luomiseksi Hive-kuoressa meidän on käytettävä komentoa alla olevan syntaksin mukaisesti:

Syntaksi:

Create database <DatabaseName>

Esimerkki: Luo tietokanta “guru99”

Alla olevassa kuvakaappauksessa näkyy create-lauseke ja sitä seuraava show-komento, joka listaa kaikki klusterin tietokannat.

Hive-kuori luo guru99-tietokannan ja listaa tietokannat show-komennolla

Yllä olevasta kuvakaappauksesta näemme, että teemme kaksi asiaa:

  1. Luodaan tietokantaa "guru99" Hiveen
  2. Olemassa olevien tietokantojen näyttäminen “show”-komennolla

Samalla näytöllä tietokanta “guru99” näkyy lopussa, kun suoritamme show-komennon, mikä tarkoittaa, että tietokanta “guru99” on luotu onnistuneesti.

Vaihe 2) Pudota tietokanta Hiveen

Pudotusta vartenping Hive-kuoressa olevassa tietokannassa meidän on käytettävä "drop"-komentoa alla olevan syntaksin mukaisesti:

Syntaksi:

Drop database <DatabaseName>

Esimerkki: Tietokannan guru99 pudottaminen

Seuraavassa kuvakaappauksessa drop-lauseke suoritetaan ensin, eikä sitä seuraava show-komento enää listaa tietokantaa.

Pesänkuoren pudotusping guru99-tietokanta ja poistamisen vahvistaminen show-komennolla

Yllä olevassa kuvakaappauksessa teemme kaksi asiaa:

  1. Olemme pudotuksessaping Hive-tietokanta 'guru99'
  2. Tarkista sama "show"-komennolla

Samassa näytössä, tietokantojen tarkistamisen jälkeen show-komennolla, tietokantaa “guru99” ei näy Hivessä. Joten voimme nyt varmistaa, että tietokanta “guru99” on poistettu.

Hive-tietokannan komennot: USE, DESCRIBE, SHOW ja ALTER DATABASE

Yllä olevat kaksi lausetta käyttävät lyhintä muotoaan. Dokumentoitu syntaksi sisältää valinnaisia ​​lausekkeita, jotka päättävät, minne tiedostot päätyvät ja mitä tapahtuu, kun nimi on jo varattu.

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];

Avainsanat DATABASE ja SCHEMA ovat keskenään vaihdettavissa, joten CREATE SCHEMA ja CREATE DATABASE tekevät täsmälleen saman asian. Loput komennot täydentävät päivittäistä työtä nimiavaruuden kanssa.

Komento Mitä se tekee
NÄYTÄ TIETOKANNAT; Listaa kaikki metastoreen rekisteröidyt tietokannat
KÄYTÄ tietokannan_nimi; Asettaa nykyisen tietokannan niin, että taulukoiden nimiin ei tarvita etuliitettä
KUVAUS TIETOKANTA tietokannan_nimi; Raportoi kommentin, HDFS:n sijainnin ja omistajan
KUVAUS TIETOKANTA LAAJENNETTU tietokannan_nimi; Lisää DBPROPERTIES-avain-arvo-parit kyseiseen tulosteeseen.
ALTER DATABASE tietokannan_nimi SET DBPROPERTIES (…); Lisää tai korvaa metatieto-ominaisuudet
ALTER DATABASE tietokannan_nimi SET OWNER USER käyttäjätunnus; Siirtää omistajuuden toiselle käyttäjälle tai roolille
MUUTA TIETOKANTA tietokannan_nimi SET SIJAINTI hdfs_path; Muuttaa siitä lähtien luotujen taulukoiden käyttämää polkua

Kaksi oletusarvoa kannattaa opetella. Ilman LOCATION-lauseketta tiedostot sijaitsevat tietovarastohakemistossa, yleensä /user/hive/warehouse/tietokannan_nimi.db, ja ilman IF EXISTS -lauseketta puuttuvan nimen pudotus aiheuttaa virheen sen sijaan, että se välittäisi arvon hiljaisesti. Molemmat asetukset tallennetaan Hive-metasto.

Hive-tietotyypin muuntaminen ja yleiset virheet

Tyyppejä ei aina käytetä täsmälleen ilmoitetulla tavalla. Hive laajentaa arvoa automaattisesti, kun tietoa ei voi kadota, ja jättää kaiken muun eksplisiittisen muunnoksen varaan.

  • Implisiittinen levennys seuraa ketjua TINYINT:stä SMALLINT:iin, sieltä INT:iin, sieltä BIGINT:iin, sieltä FLOAT:iin ja lopulta DOUBLE:iin, ja numeroita sisältävä STRING ylennetään muotoon DOUBLE.
  • Kaventaminen ei koskaan tapahdu itsestään, joten INT-sarakkeeseen liitetty DOUBLE tarvitsee kirjallisen muunnoksen.
  • CAST suorittaa kyseisen kirjoitetun muunnoksen ja palauttaa NULL-arvon virheen sijaan, jos arvoa ei voida muuntaa.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

Alla olevat virheet selittävät suurimman osan yllätyksistä, joita aloittelijat kohtaavat ensimmäisellä kaaviollaan.

Oire Syy ja korjaus
Pudotus epäonnistuu, vaikka tietokannassa on vielä taulukoita RESTRICT on oletusarvo. Lisää CASCADE poistaaksesi taulukot, joissa se on.
Pitkä jono saapuu lyhennettynä VARCHAR katkaisee merkin huomaamattomasti ilmoitetun pituutensa yli. Käytä STRING-merkkiä, kun rajaa ei haluta.
Sarake lukee NULL muunnoksen jälkeen CAST ei voinut jäsentää arvoa. Tarkista lähdetiedot ennen tyypin laajentamista.
Valuuttojen arvot menettävät paiseensa tai sentteihinsä DECIMAL ilman argumentteja tarkoittaa DECIMAL(10,0). Ilmoita mittakaava eksplisiittisesti.
Kaksi samannäköistä treffikumppania eivät koskaan täsmää STRING-päivämäärä ja DATE-sarake ovat eri tyyppejä. Vertaile ensin toisella puolella.

Kun tyypit ovat alkaneet toimia, seuraava vaihe on itse datan lataaminen ja kysely, mitä käsitellään kohdassa Hive-kyselyt, joissa on Order By-, Group By- ja Cluster By.

UKK

Ei. DATABASE ja SCHEMA ovat keskenään vaihdettavia avainsanoja HiveQL:ssä, joten CREATE SCHEMA sales ja CREATE DATABASE sales tuottavat saman metastore-objektin. Valinta on puhtaasti talon tyylikysymys.

HDFS:ssä se sijaitsee varastohakemistossa, yleensä /user/hive/warehouse/tietokannan_nimi.db. CREATE DATABASE -funktion LOCATION-lauseke korvaa kyseisen polun, ja DESCRIBE DATABASE raportoi käytetyn sijainnin.

STRING on tavallisin valinta, koska sillä ei ole ennalta määrättyä pituusrajaa eikä se tarvitse täyttöä. VARCHAR auttaa, kun pituus on pakollinen, ja CHAR sopii lyhyille kiinteäleveyksisille koodeille, kuten maalyhenteille.

DOUBLE on binäärinen liukuluku, joten toistuvat summat poikkeavat sentin murto-osilla. DECIMAL tallentaa tarkat arvot tietyllä tarkkuudella ja skaalalla, mikä pitää taloudelliset kokonaissummat toistettavissa eri laskutoimitusten välillä.

Yksinkertainen TIMESTAMP on aikavyöhykkeestä vapaa ja luetaan takaisin täsmälleen sellaisena kuin se on kirjoitettu. Hive 3.1:een lisättiin TIMESTAMP WITH LOCAL TIME ZONE -arvo, joka normalisoi arvon UTC-ajaksi kirjoitettaessa ja muuntaa sen luettaessa.

Kyllä. STRUCT voi sijaita ARRAY:n sisällä ja MAP-arvo voi itse olla STRUCT, joten ARRAY > on voimassa HiveSyvä sisäkkäisyys vaikeuttaa rajaajia, joten pidä se matalana.

Kyllä. Dataprofilointityökalut ottavat näytteitä kardinaalisuudesta, null-prosenteista ja arvoalueista ja ehdottavat sitten kapeinta käyttökelpoista tyyppiä ja tiedostomuotoa. Käsittele ehdotusta luonnoksena, koska malli ei voi nähdä tulevia työkuormia.

Copilot luonnostelee CREATE TABLE- ja CREATE DATABASE -lausekkeet lyhyestä kommentista, ja agenttiavustajat voivat muuntaa esimerkkitiedoston skeemaksi. Tarkista aina DECIMAL-asteikko ja erotinlausekkeet ennen tuloksen suorittamista.

Tiivistä tämä viesti seuraavasti: