Hive'i tabeli loomine: sisemine, muutmine ja kustutamine näidetega
⚡ Nutikas kokkuvõte
Loomine, muutmine ja mahavõtmineping Apache Hive'i tabelid kasutavad tuttavat SQL-stiilis DDL-i, kuid tulemus sõltub sellest, kas tabel on sisemine, mis kuulub Hive'ile, või väline, mis kirjeldab lihtsalt faile.
Tabelitoimingud, näiteks loomine, muutmine ja kustutamineping Selles läbikäigus saab vaadelda Hive'i tabeleid. Iga toimingut kuvatakse esmalt reaalajas seansina ja seejärel korduvkasutatava avaldusena.
Kuidas Hive'is tabelit luua, muuta ja kustutada
Alloleval ekraanipildil loome veergudega tabeli ja muudame tabeli nime.
- Tabeli guru_sample loomine kahe veerunimega, näiteks „empid“ ja „empname“
- Kuvatakse guru99 andmebaasis olevaid tabeleid
- guru_näide kuvatakse tabelite all
- Tabeli „guru_sample” muutmine tabeliks „guru_sampleNew”
- Jällegi, kui käivitate käsu „show”, kuvatakse uus nimi guru_sampleNew
Allolev sessioon läbib kõik viis sammu õiges järjekorras taru> viip ja kaks SHOW TABLES käsku enne ja pärast ümbernimetamist muudavad efekti nähtavaks.
Dropping tabel guru_sampleUus:
Üks DROP TABLE käsk eemaldab ümbernimetatud tabeli ja Hive vastab OK-ga.
Hive'i CREATE TABLE'i süntaks ja üldklauslid
Ülaltoodud näites kasutatakse lühimat võimalikku vormi. Dokumenteeritud lause aktsepteerib mitmeid valikulisi klausleid ja igaüks neist otsustab midagi, mille näide jätab vaikimisi.
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, ...)];
| Klausel | Mida see kontrollib |
|---|---|
| VÄLIS | Loob välise tabeli, seega DROP jätab andmefailid alles |
| AJUTINE | Loob seansiulatusega tabeli, mis kaob seansi lõppedes. |
| KUI EI OLEMAS | Väldib vea, kui sama nimega tabel on juba olemas |
| JAOTATUD | Jagab tabeli iga võtme väärtuse kohta üheks kataloogiks |
| KLASSIFITSEERITUD … ÄMBRITESSE | Räsib ridu fikseeritud arvuks failideks |
| REA FORMAAT / SALVESTATUD KUI | Määrab eraldaja ehk SerDe ja failivormingu, näiteks TEXTFILE, ORC või Parquet |
| ASUKOHT | Osutab tabeli kindlale HDFS-i teele, mitte lao vaikesätetele |
| TBL-OMADUSED | Manustab metaandmete võtme-väärtuse paarid, sh external.table.purge |
Seotud vorm, Loo tabel uus_tabel Nagu olemasolev_tabel, kopeerib skeemi ilma ühtegi rida kopeerimata. Struktuuriklausleid, näiteks PARTITIONED BY ja CLUSTERED BY, käsitletakse üksikasjalikult juhendis Taru vaheseinad ja ämbrid.
Tabelitüübid ja nende kasutamine
Tabelite puhul on tegemist täpselt samamoodi nagu traditsioonilistes relatsioonandmebaasides. Selliseid funktsioone nagu filtreerimine ja liitmised saab teostada tabelite peal.
Taru tegeleb kahte tüüpi tabelistruktuuridega – sisemiste ja väliste tabelitega –, olenevalt skeemi laadimisest ja ülesehitusest. MesilaspereSee valik ei ole kosmeetiline: see otsustab, kellele kuuluvad andmefailid ja mis nendega juhtub, kui tabel kustutatakse.
Sisemised tabelid tarus
- Sisemine tabel on oma olemuselt tihedalt seotud. Seda tüüpi tabelis peame kõigepealt tabeli looma ja andmed laadima.
- Me võime seda nimetada skeemi andmeteks.
- Tilga kaupaping Sellest tabelist eemaldatakse nii andmed kui ka skeem.
- Selle tabeli salvestatud asukoht on /user/hive/warehouse.
- Sisemisi tabeleid nimetatakse ka hallatavateks tabeliteks ja ainult need toetavad TRUNCATE, ARCHIVE, MERGE, CONCATENATE ja ACID tehinguid.
Millal valida sisemine tabel?
- Kui töötlemisandmed on kohalikus failisüsteemis saadaval
- Kui tahame, et Hive haldaks andmete kogu elutsüklit, sealhulgas kustutamist
Sisemise tabeli koodilõiku näidis
- Sisemise tabeli loomiseks
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Laadige andmed sisemisse tabelisse
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Kuvage tabeli sisu
Hive>select * from guruhive_internaltable;
- Sisemise laua kukutamiseks
Hive>DROP TABLE guruhive_internaltable;
Kui kustutasite tabeli guruhive_internaltable, kustutatakse selle metaandmed ja andmed Hive'ist. Kui pole määratud käsku PURGE, teisaldatakse failid HDFS-i prügikasti, mitte ei eemaldata neid kohe.
Järgmiselt ekraanipildilt näeme kõigi nelja lause väljundit ühe seansi jooksul, mis lõpeb eduka drop'iga.
Ülaltoodud koodis ja ekraanipildil teeme järgmist:
- Looge sisemine tabel
- Laadige andmed sisemisse tabelisse
- Kuvage tabeli sisu
- Sisemise laua kukutamiseks
Välised tabelid tarus
- Väline tabel on oma olemuselt lõdvalt seotud. Andmed on HDFS-is saadaval. Tabel luuakse HDFS-i andmete põhjal.
- Teisisõnu, võime öelda, et see loob andmete põhjal skeemi.
- Kukkumise ajalping tabelist eemaldatakse ainult skeem, andmed on HDFS-is endiselt saadaval nagu varem.
- Välised tabelid pakuvad võimalust luua HDFS-i salvestatud andmete jaoks mitu skeemi, selle asemel et andmeid iga kord skeemi värskendamisel kustutada
- Alates Hive 4.0.0-st kustutab DROP ka andmed, kui määrata tabeli atribuudile external.table.purge väärtuseks true.
Millal valida väline tabel?
- Kui töötlemisandmed on HDFS-is saadaval
- Kasulik, kui faile kasutatakse väljaspool Hive'i
Välise tabeli koodilõiku näidis
- Loo väline tabel
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Kui me tabeli loomisel asukohta ei täpsusta, saame andmed käsitsi laadida.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Kuvage tabeli sisu
Hive>select * from guruhive_external;
- Välise tabeli eemaldamiseks
Hive>DROP TABLE guruhive_external;
Järgmiselt ekraanipildilt näeme väljundit. Pane tähele, et lõpus olev drop eemaldab ainult skeemi – LOCATION tee all olev fail jääb puutumata.
Ülaltoodud koodis teeme järgmist
- Looge väline tabel
- Laadige andmed välisesse tabelisse
- Kuvage tabeli sisu
- Dropping väline laud
Sisemiste ja väliste tabelite erinevus
| tunnusjoon | sisemine | Väline |
|---|---|---|
| Skeem | Andmed skeemi kohta | Andmete skeem |
| Ladustamiskoht | /kasutaja/taru/ladu | HDFS-i asukoha määras LOCATION |
| Andmete kättesaadavus | Kohalikus failisüsteemis | HDFS-i piires |
| DROP-i mõju | Kustutab skeemi ja andmed | Kustutab ainult skeemi, välja arvatud juhul, kui external.table.purge on tõene |
| TRUNCATE tugi | Toetatud | Ei toetata |
| ACID tehingud | Toetatud | Ei toetata |
. Apache Hive'i dokumentatsioon sätestab reegli selgelt: Hive eeldab, et talle kuuluvad hallatavate tabelite andmed ja mitte väliste tabelite andmed ning kõik ülaltoodud erinevused tulenevad sellest ühest eeldusest.
Käskude ALTER TABLE ja DROP TABLE juhend
Ülaltoodud ekraanipildid näitavad ainult ümbernimetamist ja tabeli tühjendamist. Need on laused, milleni praktik olemasoleva tabeli puhul kõige sagedamini jõuab.
| väljavõte | Eesmärk |
|---|---|
| ALTER TABLE tabeli_nimi NIMETA ÜMBER uueks_nimeks; | Nimetab tabeli ümber; hallatava tabeli puhul teisaldab see ka selle HDFS-kataloogi |
| ALTER TABLE tabeli_nimi LISA VEERUD (veerg_nimi andmetüüp); | Lisab skeemi lõppu ühe või mitu veergu |
| ALTER TABLE tabeli_nimi CHANGE COLUMN vana_nimi uus_nimi andmetüüp; | Veeru ümbernimetamine või tüübi muutmine |
| ALTER TABLE tabeli_nimi ASENDA VEERUD (…); | Asendab kogu veeruloendi uuega |
| ALTER TABLE tabeli_nimi SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Teisendab hallatava tabeli väliseks tabeliks ja FALSE tühistab selle. |
| DROP TABLE [KUI OLEMAS] table_name [PURGE]; | Eemaldab tabeli; PURGE jätab prügikasti vahele, seega andmeid ei saa taastada. |
| KÄRBI [TABEL] tabeli_nimi; | Eemaldab kõik read, aga säilitab skeemi; ainult hallatavad tabelid |
Igasse skripti tasub sisse ehitada kaks kaitseklauslit. IF EXISTS hoiab ära juba eemaldatud tabeli dropi nurjumise ja DESCRIBE FORMATTED kinnitab enne dropi käivitamist, kas sihtmärk on MANAGED_TABLE või EXTERNAL_TABLE.





