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.

  • 🔢 Numbrilised tüübid: TINYINT kuni BIGINT katavad täisarvud, samas kui DECIMAL(täpsus, skaala) säilitab täpsed väärtused, mida FLOAT ja DOUBLE ei suuda.
  • 🔤 Stringi tüübid: Funktsioonil STRING pole deklareeritud piirangut, VARCHAR aktsepteerib 1 kuni 65 535 tähemärki ja CHAR on fikseeritud kuni 255 tähemärgile.
  • 📅 Päev ja aeg: DATE salvestab tavalise AAAA-KK-PP väärtuse ja TIMESTAMP lisab sellele valikulise nanosekundilise täpsuse.
  • 🧩 Komplekssed tüübid: ARRAY, MAP, STRUCT ja UNIONTYPE pakivad mitu omavahel seotud väärtust ühte veergu paljude asemel.
  • 🏗️ Loo andmebaas: CREATE DATABASE registreerib metasalvestuses nimeruumi ja SHOW DATABASES kinnitab selle olemasolu.
  • 🗑️ Andmebaasi kustutamine: DROP DATABASE eemaldab nimeruumi ja CASCADE on vajalik alati, kui selles on veel tabeleid.

Taru andmetüübid ja kuidas Hive'is andmebaase luua ja kustutada

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.

Hive shell loob guru99 andmebaasi ja loetleb andmebaasid show käsuga

Ülaltoodud ekraanipildi põhjal teeme kahte asja:

  1. Andmebaasi “guru99” loomine tarus
  2. 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.

Taru kesta langusping guru99 andmebaas ja eemaldamise kinnitamine show abil

Ülaltoodud ekraanipildil teeme kahte asja:

  1. Me oleme langusesping andmebaas 'guru99' Hive'ist
  2. 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.

KKK

Ei. DATABASE ja SCHEMA on HiveQL-is omavahel asendatavad märksõnad, seega CREATE SCHEMA sales ja CREATE DATABASE sales loovad sama metastore objekti. Valik on puhtalt sisemise stiili küsimus.

Tavaliselt asub see HDFS-i andmeladu kataloogis /user/hive/warehouse/database_name.db. CREATE DATABASE'i LOCATION-klausel tühistab selle tee ja DESCRIBE DATABASE annab teada, millist asukohta tegelikult kasutati.

STRING on tavaline valik, kuna sellel pole deklareeritud piirangut ja see ei vaja täiteid. VARCHAR aitab siis, kui pikkust on vaja jõustada, ja CHAR sobib lühikeste fikseeritud laiusega koodide, näiteks riikide lühendite jaoks.

DOUBLE on binaarne ujukomaarvestus, seega korduvad summad triivivad sendi murdosa võrra. DECIMAL salvestab täpsed väärtused kindla täpsusega ja skaalal, mis hoiab finantssummad eri tsüklite vahel korratavatena.

Lihtne TIMESTAMP on ajavööndivaba ja loetakse tagasi täpselt nii, nagu see on kirjutatud. Hive 3.1-s on lisatud TIMESTAMP WITH LOCAL TIME ZONE, mis normaliseerib kirjutamisel väärtuse UTC-ks ja teisendab selle lugemisel.

Jah. STRUCT võib asuda massiivi sees ja MAP-i väärtus võib ise olla STRUCT, seega ARRAY > kehtib MesilaspereSügav pesastamine muudab eraldajad keerulisemaks, seega hoidke see madalana.

Jah. Andmete profileerimise tööriistad võtavad näidiseid kardinaalsuse, nullmäärade ja väärtusvahemike kohta ning pakuvad seejärel välja kõige kitsama toimiva tüübi ja failivormingu. Käsitlege ettepanekut mustandina, sest mudel ei näe tulevasi töökoormusi.

Copilot koostab lühikese kommentaari põhjal CREATE TABLE ja CREATE DATABASE laused ning agentide assistendid saavad näidisfaili skeemiks teisendada. Enne tulemuse käivitamist kontrollige alati DECIMAL-skaalat ja eraldajaklausleid.

Võta see postitus kokku järgmiselt: