Hiven luontitaulukko: sisäinen, muokkaaminen ja poistaminen esimerkein
⚡ Älykäs yhteenveto
Luominen, muuttaminen ja poistaminenping Apache Hiven taulukot käyttävät tuttua SQL-tyylistä DDL:ää, mutta lopputulos riippuu siitä, onko taulukko sisäinen, jonka Hive omistaa, vai ulkoinen, joka vain kuvaa tiedostoja.
Taulukon toiminnot, kuten luominen, muuttaminen ja poistaminenping Tässä läpikäynnissä voidaan tarkastella Hive-taulukoita. Jokainen operaatio näytetään ensin reaaliaikaisena istuntona ja sitten uudelleenkäytettävänä lausekkeena.
Taulukon luominen, muokkaaminen ja poistaminen Hivessä
Alla olevassa kuvakaappauksessa luomme taulukon sarakkeineen ja muutamme taulukon nimeä.
- Taulukon guru_sample luominen kahdella sarakenimellä, kuten ”empid” ja ”empname”
- Näytetään guru99-tietokannassa olevat taulukot
- guru_sample näytetään taulukoiden alla
- Muutetaan taulukkoa “guru_sample” muotoon “guru_sampleNew”
- Jälleen kerran, kun suoritat “show”-komennon, se näyttää uuden nimen guru_sampleNew
Alla olevassa istunnossa kaikki viisi vaihetta suoritetaan järjestyksessä pesä> kehote, ja kaksi SHOW TABLES -kutsua ennen nimeämistä ja sen jälkeen tekevät vaikutuksesta näkyvän.
Pudotaping taulukko guru_esimerkkiUusi:
Yksi DROP TABLE -komento poistaa uudelleennimetyn taulukon, ja Hive vastaa OK:lla.
Hive CREATE TABLE -syntaksi ja yleiset lausekkeet
Yllä olevassa esimerkissä käytetään lyhintä mahdollista muotoa. Dokumentoitu lauseke hyväksyy useita valinnaisia lausekkeita, ja jokainen niistä päättää jotain, minkä esimerkki jättää oletusarvoiseksi.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| lauseke | Mitä se hallitsee |
|---|---|
| ULKOINEN | Luo ulkoisen taulukon, joten DROP jättää datatiedostot paikoilleen |
| VÄLIAIKAINEN | Luo istuntokohtaisen taulukon, joka katoaa istunnon päättyessä. |
| JOS EI OLE OLEMASSA | Estää virheen, kun samanniminen taulukko on jo olemassa |
| OSIOINTI | Jakaa taulukon yhteen hakemistoon avainarvoa kohden |
| RYHMITTÄÄ … n ÄMPÄRIIN | Tiivistää rivit kiinteäksi määräksi tiedostoja |
| RIVIMUOTO / TALLENNETTU MUISTONA | Asettaa erottimen eli SerDe-merkin ja tiedostomuodon, kuten TEXTFILE, ORC tai Parquet |
| SIJAINTI | Osoittaa taulukon tiettyyn HDFS-polkuun oletusarvoisen varastopolun sijaan |
| TBL-KIINTEISÖT | Liittää metadatan avain-arvo-parit, mukaan lukien external.table.purge |
Liittyvä lomake, LUO TAULU uusi_taulukko KUTEN olemassa oleva_taulukko, kopioi skeeman kopioimatta rivejä. Rakennelausekkeita, kuten PARTITIONED BY ja CLUSTERED BY, käsitellään yksityiskohtaisesti oppaassa Pesän väliseinät ja ämpärit.
Taulukkotyypit ja niiden käyttö
Taulukoiden osalta se on aivan samanlainen tapa luoda kuin perinteisissä relaatiotietokannoissa. Toiminnot, kuten suodatus ja liitokset, voidaan suorittaa taulukoille.
Hive käsittelee kahdenlaisia taulukkorakenteita, sisäisiä ja ulkoisia taulukoita, riippuen skeeman lataustavasta ja suunnittelusta HiveValinta ei ole kosmeettinen: se määrittää kuka omistaa datatiedostot ja mitä niille tapahtuu, kun taulukko poistetaan.
Sisäiset taulukot Hivessä
- Sisäinen taulukko on luonteeltaan tiiviisti kytketty. Tällaisessa taulukossa meidän on ensin luotava taulukko ja ladattava tiedot.
- Voimme kutsua tätä skeeman dataksi.
- Pisaroittainping Tästä taulukosta poistetaan sekä tiedot että kaava.
- Tämän taulukon tallennuspaikka on /user/hive/warehouse.
- Sisäisiä taulukoita kutsutaan myös hallituiksi taulukoiksi, ja vain ne tukevat TRUNCATE-, ARCHIVE-, MERGE-, CONCATENATE- ja ACID-tapahtumia.
Milloin valita sisäinen pöytä?
- Jos käsittelytiedot ovat saatavilla paikallisessa tiedostojärjestelmässä
- Jos haluamme Hiven hallitsevan tietojen koko elinkaarta, mukaan lukien poistaminen
Esimerkkikoodinpätkä sisäiselle taulukolle
- Sisäisen taulukon luominen
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Lataa tiedot sisäiseen taulukkoon
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Näytä taulukon sisältö
Hive>select * from guruhive_internaltable;
- Pudottaaksesi sisäisen pöydän
Hive>DROP TABLE guruhive_internaltable;
Jos poistit guruhive_internaltable-tiedoston, se poistetaan Hivestä metatietoineen ja dataineen. Ellei PURGE-metodia ole määritetty, tiedostot siirretään HDFS:n roskakoriin sen sijaan, että ne poistettaisiin välittömästi.
Seuraavasta kuvakaappauksesta voimme havaita kaikkien neljän lausekkeen tulosteen yhden istunnon aikana, joka päättyy onnistuneeseen pudotukseen.
Yllä olevassa koodissa ja kuvakaappauksessa teemme seuraavat asiat,
- Luo sisäinen taulukko
- Lataa tiedot sisäiseen taulukkoon
- Näytä taulukon sisältö
- Pudottaaksesi sisäisen pöydän
Ulkoiset taulukot Hivessä
- Ulkoinen taulukko on luonteeltaan löyhästi kytketty. Data on saatavilla HDFS-muodossa. Taulukko luodaan HDFS-datan pohjalta.
- Toisin sanoen voimme sanoa, että se luo datalle skeeman.
- Pudotuksen aikaanping taulukosta pudotetaan vain skeema, tiedot ovat edelleen saatavilla HDFS:ssä kuten ennenkin.
- Ulkoiset taulukot tarjoavat mahdollisuuden luoda useita skeemoja HDFS:ään tallennetuille tiedoille sen sijaan, että tiedot poistettaisiin aina, kun skeema päivitetään.
- Hive 4.0.0:ssa taulukon ominaisuuden external.table.purge asettaminen arvoon true saa DROP:n poistamaan myös tiedot.
Milloin valita ulkoinen pöytä?
- Jos käsittelytiedot ovat saatavilla HDFS:ssä
- Hyödyllinen, kun tiedostoja käytetään Hiven ulkopuolella
Esimerkkikoodinpätkä ulkoiselle taulukolle
- Luo ulkoinen taulukko
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Jos emme määritä sijaintia taulukon luomisen yhteydessä, voimme ladata tiedot manuaalisesti
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Näytä taulukon sisältö
Hive>select * from guruhive_external;
- Ulkoisen taulukon pudottaminen
Hive>DROP TABLE guruhive_external;
Seuraavasta kuvakaappauksesta näemme tuloksen. Huomaa, että lopussa oleva pudotus poistaa vain skeeman – LOCATION-polun alla oleva tiedosto pysyy koskemattomana.
Yllä olevassa koodissa teemme seuraavat asiat
- Luo ulkoinen taulukko
- Lataa tiedot ulkoiseen taulukkoon
- Näytä taulukon sisältö
- Pudotaping ulkoinen pöytä
Sisäisten ja ulkoisten taulukoiden välinen ero
| Ominaisuus | Sisäinen | Ulkoinen |
|---|---|---|
| Malli | Data Schema | Schema on Data |
| Varastointisijainti | /käyttäjä/pesä/varasto | HDFS-sijainnin on antanut LOCATION |
| Tietojen saatavuus | Paikallisessa tiedostojärjestelmässä | HDFS:n sisällä |
| DROPin vaikutus | Poistaa skeeman ja tiedot | Poistaa vain skeeman, ellei external.table.purge ole true |
| TRUNCATE-tuki | Tuetut | Ei tuettu |
| ACID-tapahtumat | Tuetut | Ei tuettu |
Apache Hiven dokumentaatio ilmaisee säännön selvästi: Hive olettaa omistavansa hallittujen taulukoiden tiedot ja olettaa, ettei se omista ulkoisten taulukoiden tietoja, ja jokainen yllä oleva ero seuraa tästä yhdestä oletuksesta.
ALTER TABLE- ja DROP TABLE -komentojen opas
Yllä olevissa kuvakaappauksissa näkyy vain uudelleennimeäminen ja pudottaminen. Näitä lauseita useimmiten käytetään olemassa olevalla taulukolla.
| Lausunto | Tarkoitus |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | Nimeää taulukon uudelleen; hallitun taulukon tapauksessa tämä siirtää myös sen HDFS-hakemiston |
| ALTER TABLE taulukon_nimi ADD COLUMNS (sarakkeen_nimi tietotyyppi); | Lisää yhden tai useamman sarakkeen skeeman loppuun |
| ALTER TABLE taulukon_nimi CHANGE COLUMN vanha_nimi uusi_nimi tietotyyppi; | Nimeää sarakkeen uudelleen tai muuttaa sen tyyppiä |
| ALTER TABLE taulukon_nimi KORVAA SARAKKEET (…); | Korvaa koko sarakeluettelon uudella |
| ALTER TABLE taulukon_nimi SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Muuntaa hallitun taulukon ulkoiseksi taulukoksi ja FALSE kääntää sen arvon. |
| PUDOTA TAULU [JOS OLEMASSA] taulukon_nimi [TYHJENNÄ]; | Poistaa taulukon; PURGE ohittaa roskakorikansion, joten tietoja ei voida palauttaa |
| TRUNCATE [TAULUKKO] taulukon_nimi; | Poistaa kaikki rivit, mutta säilyttää kaavan; vain hallitut taulukot |
Kaksi suojatoimia kannattaa sisällyttää mihin tahansa skriptiin. IF EXISTS estää pudotuksen epäonnistumisen jo poistetussa taulukossa, ja DESCRIBE FORMATTED vahvistaa, onko kohde MANAGED_TABLE vai EXTERNAL_TABLE, ennen pudotuksen suorittamista.





