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.
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.
Yllä olevasta kuvakaappauksesta näemme, että teemme kaksi asiaa:
- Luodaan tietokantaa "guru99" Hiveen
- 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.
Yllä olevassa kuvakaappauksessa teemme kaksi asiaa:
- Olemme pudotuksessaping Hive-tietokanta 'guru99'
- 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.



