Taru andmetüübid: tarus andmebaaside loomine ja eemaldamine
⚡ Nutikas kokkuvõte
Hive'i andmetüübid määravad, mida iga tabeli veerg mahutab, ning käsud CREATE DATABASE ja DROP DATABASE seadistavad või eemaldavad nimeruumi, kus need tabelid Hive'i metasalvestuses asuvad.

Andmetüübid on Hive'i päringukeeles ja andmete modelleerimisel väga olulised elemendid. Tabeli veergude tüüpide määratlemiseks peame teadma andmetüüpe ja nende kasutamist.
Järgnevalt antakse lühike ülevaade mõnest Hive'is esinevast andmetüübist:
- Numbrilised tüübid
- Stringi tüübid
- Kuupäeva/kellaaja tüübid
- Komplekssed tüübid
Andmetüübid tarus
Iga Hive'i veerg deklareeritakse ühe alloleva tüübiga. Esimesena tulevad lihttüübid, millele järgnevad keerukamad tüübid, mis sisaldavad ühes veerus rohkem kui ühte väärtust.
Taru numbrilised andmetüübid
Numbriliste veergude suurus on ühest baidist kaheksa baitini, seega väärtustele sobivaima väikseima tüübi valimine hoiab nii salvestus- kui ka skannimiskulud madalad.
| KASUTUSALA | Mälu eraldamine |
|---|---|
| TINYINT | 1-baidine märgiga täisarv (-128 kuni 127) |
| VÄIKE | 2-baidine märgiga täisarv (-32,768 kuni 32,767) |
| INT | 4-baidine märgiga täisarv (-2,147,483,648 kuni 2,147,483,647) |
| SUUR | 8-baidine märgiga täisarv (-9,223,372,036,854,775,808 kuni 9,223,372,036,854,775,807) |
| UJU | 4-baidine ühe täpsusega ujukomaarv |
| DOUBLE | 8-baidine kahekordse täpsusega ujukomaarv |
| Kümnendik | Selle tüübi puhul saame täpsuse ja skaala defineerida kujul DECIMAL(täpsus, skaala). Kui need välja jätta, kasutab Hive funktsiooni DECIMAL(10,0). |
Taru stringi andmetüübid
Märgiveerud on kolme kujuga ja erinevus seisneb selles, kas Hive jõustab deklareeritud pikkuse.
| KASUTUSALA | Pikkus |
|---|---|
| PAAK | Fikseeritud pikkus, kuni 255 tähemärki. Lühemad väärtused täidetakse tühikutega. |
| VARCHAR | 1 kuni 65 535 tähemärki. Pikem väärtus kärbitakse vaikselt. |
| STRING | Siin saame pikkuse defineerida (piirangut pole) |
Taru kuupäeva/kellaaja andmetüübid
Ajalised veerud salvestatakse ilma ajavööndi nihketa, mida tasub meeles pidada enne erinevate klastrite kirjutatud väärtuste võrdlemist.
| KASUTUSALA | Kasutus |
|---|---|
| Ajatempel | Toetab traditsioonilist Unix ajatempel valikulise nanosekundilise täpsusega |
| kuupäev | See on formaadis AAAA-KK-PP. Kuupäeva tüübi toetatud väärtuste vahemik on 0000-01-01 kuni 9999-12-31, olenevalt primitiivi toetusest. Java tüüpiline kuupäev |
Taru muud andmetüübid
Kaks täiendavat primitiivi asuvad väljaspool numbri-, stringi- ja kuupäevaperekondi, kuid esinevad regulaarselt reaalsetes skeemides.
| KASUTUSALA | Kasutus |
|---|---|
| BOOLE | Salvestab väärtuse tõene või väär |
| Binaarne | Salvestab baitide massiivi, mis hoiab STRING-veerust toorsisu väljas. |
Taru keerulised andmetüübid
Komplekssed tüübid pesastavad väärtused ühte veergu, mis eemaldab lisaliite, mida relatsiooniline disain vajaks.
| KASUTUSALA | Kasutus |
|---|---|
| Massiraadid | ARRAY Negatiivsed väärtused ja mittekonstantsed avaldised pole lubatud |
| kaardid | KAART Negatiivsed väärtused ja mittekonstantsed avaldised pole lubatud |
| Struktuurid | STRUKTUUR |
| Liit | UNIONTÜÜP |
Näide taru keerukatest andmetüüpidest
Ülaltoodud tabel annab deklaratsiooni vormi. Allolev lause koondab kolm keerukat tüüpi ühte tabelisse, nii et eraldajaklausleid ja juurdepääsusüntaksit saab koos näha.
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;
Siin on vaja kolme eraldi eraldajat: üks veergude vahel, teine massiivi ARRAY või STRUCT elementide vahel ja kolmas MAP-võtme ja selle väärtuse vahel. Kui tabel on olemas, loetakse iga kompleksveerg omaenda aksessori abil.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
Allolev tabel võtab kokku, milline ligipääsusüsteem millisesse tüüpi kuulub.
| KASUTUSALA | Kuidas väärtust loetakse |
|---|---|
| ARRAY | Nullpõhine indeks, näiteks oskused[0] |
| MAP | Nurksulgudes olev võtmeotsing, näiteks debtations['tax'] |
| STRUKT | Punktide tähistus väljal nimel, näiteks aadress.linn |
| UNIONTÜÜP | Kasutatakse harva, kuna päringutugi sellele on jäänud puudulikuks |
Komplekssed tüübid võivad olla pesastatud, seega ARRAY > on kehtiv veerudeklaratsioon. Kui veerupaigutus on paika pandud, luuakse tabelid ise punktis käsitletud lausetega. Taru loomine, muutmine ja tabeli kustutamine.
Kuidas luua ja kustutada andmebaase tarus
Hive'i andmebaas on lihtsalt nimeruum, mis rühmitab tabeleid, seega on see esimene objekt, mis enne tabelitega töötamise alustamist luuakse. Järgnevalt on toodud sammud andmebaaside loomiseks ja kustutamiseks Hive'is.
1. samm) Looge andmebaas Hive'is
Hive'i kestas andmebaasi loomiseks peame kasutama allolevas süntaksis näidatud käsku:
süntaksit:
Create database <DatabaseName>
Näide: Loo andmebaas „guru99”
Allolev ekraanipilt näitab loomise käsku, millele järgneb show-käsk, mis loetleb kõik klastri andmebaasid.
Ülaltoodud ekraanipildi põhjal teeme kahte asja:
- Andmebaasi “guru99” loomine tarus
- Olemasolevate andmebaaside kuvamine käsuga „show”
Samal ekraanil kuvatakse show käsu käivitamisel lõpus andmebaas „guru99”, mis tähendab, et andmebaas „guru99” on edukalt loodud.
2. samm) Andmebaasi kustutamine tarus
Tilga jaoksping Hive'i kestas oleva andmebaasi puhul peame kasutama käsku „drop”, nagu on näidatud allolevas süntaksis:
süntaksit:
Drop database <DatabaseName>
Näide: Andmebaasi guru99 kustutamine
Järgmisel ekraanipildil käivitatakse esmalt drop-lause ja järgnev show-käsk ei loetle enam andmebaasi.
Ülaltoodud ekraanipildil teeme kahte asja:
- Me oleme langusesping andmebaas 'guru99' Hive'ist
- Sama ristkontroll käsuga „show”
Samal ekraanil, pärast andmebaaside kontrollimist käsuga show, ei ilmu Hive'i andmebaasi „guru99“. Seega saame nüüd kinnitada, et andmebaas „guru99“ on kustutatud.
Taru andmebaasi käsud: USE, DESCRIBE, SHOW ja ALTER DATABASE
Kaks ülaltoodud lauset kasutavad oma lühimat vormi. Dokumenteeritud süntaks sisaldab valikulisi klausleid, mis otsustavad, kuhu failid maanduvad ja mis juhtub, kui nimi on juba võetud.
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];
Märksõnad DATABASE ja SCHEMA on kogu käsus omavahel asendatavad, seega teevad CREATE SCHEMA ja CREATE DATABASE täpselt sama asja. Ülejäänud käsud täiendavad igapäevast tööd nimeruumiga.
| käsk | Mida see teeb |
|---|---|
| NÄITA ANDMEBAASID; | Loetleb kõik metasalvestuses registreeritud andmebaasid |
| USE andmebaasi_nimi; | Määrab praeguse andmebaasi nii, et tabelinimedele pole eesliidet vaja |
| KIRJELDAGE ANDMEBAASI andmebaasi_nimi; | Teatab kommentaarist, HDFS-i asukohast ja omanikust |
| KIRJELDAGE LAIENDATUD ANDMEBAASI andmebaasi_nimi; | Lisab väljundile DBPROPERTIES võtme-väärtuse paarid |
| ALTER DABAASI andmebaasi_nimi SET DBPROPERTIES (…); | Lisab või asendab metaandmete atribuute |
| ALTER DATABASE andmebaasi_nimi SET OWNER USER kasutaja_nimi; | Annab omandiõiguse üle teisele kasutajale või rollile |
| ALTER ANDMEBAAS andmebaasi_nimi MÄÄRA ASUKOHT hdfs_path; | Muudab edaspidi loodud tabelite kasutatavat rada |
Tasub meelde jätta kaks vaikesätet. Ilma LOCATION-klauslita asuvad failid andmeladu kataloogis, tavaliselt /user/hive/warehouse/andmebaasi_nimi.db, ja ilma IF EXISTS-klauslita tekitab puuduva nime puhul kustutamine vea, selle asemel et vaikselt edastada. Mõlemad sätted asuvad kaustas Taru metapood.
Taru andmetüübi teisendamine ja levinud vead
Tüüpe ei kasutata alati täpselt nii, nagu deklareeritud. Hive laiendab väärtust automaatselt, kui teavet ei saa kaotada, ja jätab kõik muu selgesõnalise teisenduse hooleks.
- Kaudne laiendamine järgneb ahelale TINYINT-ist SMALLINT-iks, seejärel INT-iks, seejärel BIGINT-iks, seejärel FLOAT-iks ja DOUBLE-iks ning numbreid sisaldav STRING edutatakse DOUBLE-iks.
- Kitsendamine ei toimu kunagi iseenesest, seega vajab INT-veerule määratud DOUBLE kirjalikku teisendust.
- CAST teostab selle kirjaliku teisenduse ja tagastab väärtuse NULL, mitte vea, kui väärtust ei saa teisendada.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
Allpool olevad vead seletavad enamiku üllatusi, millega algajad oma esimese skeemi koostamisel kokku puutuvad.
| Sümptom | Põhjus ja lahendus |
|---|---|
| Andmebaasi kustutamine ebaõnnestub, kui tabeleid on endiselt andmebaasis. | Vaikimisi on RESTRICT. Lisage CASCADE, et tabelid sellega eemaldada. |
| Pikk nöör saabub lühendatuna | VARCHAR kärbib vaikselt üle deklareeritud pikkuse. Kui piirangut pole vaja, kasutage STRING-i. |
| Pärast teisendamist loetakse veerg NULL-iks | CAST ei suutnud väärtust parsida. Enne tüübi laiendamist kontrollige lähteandmeid. |
| Valuutade väärtused kaotavad oma paise või sente | DECIMAL ilma argumentideta tähendab DECIMAL(10,0). Esitage skaala selgesõnaliselt |
| Kaks identse välimusega kuupäeva ei sobi kunagi kokku | STRING kuupäevaveerg ja DATE veerg on erinevat tüüpi. Enne võrdlemist tuleks üks külg ümber hinnata. |
Kui tüübid on käitunud, on järgmine samm andmete laadimine ja päringute tegemine, mida käsitletakse jaotises Taru päringud järjestuspõhimõtte (Order By), rühmitamise (Group By) ja Cluster By.


