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.

  • 🧱 LOO TABEL: Üks lause määratleb Hive'i tabeli veerud, rea vormingu ja valikuliselt ka salvestuskoha.
  • ???? ️ MUUDA TABEL: Käsk RENAME muudab tabeli nime ja käsk ADD COLUMNS või CHANGE COLUMN muudab skeemi ilma andmeid uuesti laadimata.
  • 🗑️ VÄLJAPANEV TABEL: Dropping sisemine tabel kustutab nii skeemi kui ka andmed, samas kui dropping Väline tabel eemaldab ainult metaandmed.
  • 🔒 Sisemine kuulub: Sisemine või hallatav tabel asub laokataloogi all ja Hive kontrollib selle kogu elutsüklit.
  • 🔗 Välisele viidatakse: Väline tabel osutab failidele, mida loevad ka teised tööriistad, seega need failid jäävad ka pärast äraviskamist alles.
  • 🔎 Kinnitage tüüp: KIRJELDAGE VORMINGUTATUD aruandeid MANAGED_TABLE või EXTERNAL_TABLE, mis kõrvaldab igasuguse oletuse enne tühjendamist.

Näidetega käsud taru tabeli loomiseks, muutmiseks ja kustutamiseks

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.

  1. Tabeli guru_sample loomine kahe veerunimega, näiteks „empid“ ja „empname“
  2. Kuvatakse guru99 andmebaasis olevaid tabeleid
  3. guru_näide kuvatakse tabelite all
  4. Tabeli „guru_sample” muutmine tabeliks „guru_sampleNew”
  5. 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.

Taru seanss loob guru_sample'i ja nimetab selle ümber guru_sample'iks (Uus)

Dropping tabel guru_sampleUus:

Üks DROP TABLE käsk eemaldab ümbernimetatud tabeli ja Hive vastab OK-ga.

Taru kesta langusping guru_sampleNew tabel OK vastusega

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

  1. Sisemise tabeli loomiseks
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Laadige andmed sisemisse tabelisse
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Kuvage tabeli sisu
        Hive>select * from guruhive_internaltable;
  4. 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.

Taru seansi loomine, laadimine, päringute tegemine ja kustutamineping guruhive_sisetabel

Ü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

  1. 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';
  2. 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;
  3. Kuvage tabeli sisu
      Hive>select * from guruhive_external;
  4. 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.

Taru seansi loomine, laadimine, päringute tegemine ja kustutamineping guruhive_external

Ü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.

KKK

Käivita käsk DESCRIBE FORMATTED table_name. Tabeli tüübi real kuvatakse kas MANAGED_TABLE või EXTERNAL_TABLE. Kontrollimine enne kustutamist on odavaim viis vältida andmete kustutamist, mida teised tööd veel loevad.

Jah. ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') pöörab metasalvestuses tüübi ümber ja FALSE pöörab selle tagasi. Andmefailid jäävad oma kohale, seega pole vaja uuesti laadida.

Tavaliselt mitte, kustutatakse ainult metasalvestuse kirje. Alates Hive 4.0.0-st kustutatakse aga DROP-käsuga ka välise tabeli andmed, mille atribuut external.table.purge on seatud väärtusele true, seega kontrollige kõigepealt omadusi.

Lihtne CREATE TABLE loob nüüd vaikimisi hallatud tehingutega ORC-tabeli lihtsa tekstitabeli asemel. Märksõna EXTERNAL lisamine säilitab Hive 3 klastris vanema, mitte-ACID käitumise.

TRUNCATE eemaldab kõik read, kuid säilitab skeemi ja see toimib ainult hallatavate tabelite puhul. DROP eemaldab samuti skeemi. TRUNCATE on turvalisem valik, kui tabeli definitsioon peaks uuesti laadimise üle elama.

Ei. Hive voldib metasalvestuses identifikaatorid väiketähtedeks, seega GURU_SAMPLE ja guru_sample viitavad samale tabelile. Andmete sees olevad stringiväärtused jäävad tõstutundlikuks, mistõttu WHERE-võrdlus võib ikkagi ridu vahele jätta.

Jah. Kataloogitööriistade masinõppe funktsioonid profiilivad veergude kardinaalsust, nullväärtuste määrasid ja päringumustreid ning pakuvad seejärel välja andmetüüpe, failivorminguid ja partitsioonivõtmeid. Väljundit käsitletakse mustandina, kuna mudel ei näe planeeritud töökoormusi.

Copilot koostab lühikese kommentaari põhjal CREATE, ALTER ja DROP laused ning agendiassistendid saavad luua terve migreerimisskripti. RevVaadake märksõna EXTERNAL ja mis tahes PURGE valikut, sest vale oletus kustutab tegelikud andmed.

Võta see postitus kokku järgmiselt: