Hive Create Table: Intern, Ændre og Slip med Eksempler
⚡ Smart opsummering
Oprettelse, ændring og sletningping Tabeller i Apache Hive bruger den velkendte DDL i SQL-stil, men resultatet afhænger af, om tabellen er intern, som Hive ejer, eller ekstern, som blot beskriver filer.
Tabelhandlinger såsom oprettelse, ændring og sletningping Tabeller i Hive kan ses i denne gennemgang. Hver handling vises først som en livesession og derefter som en genanvendelig sætning.
Sådan opretter, ændrer og sletter du en tabel i Hive
I nedenstående skærmbillede opretter vi en tabel med kolonner og ændrer tabelnavnet.
- Opretter tabellen guru_sample med to kolonnenavne såsom "empid" og "empname"
- Visning af tabeller i guru99-databasen
- guru_sample vises under tabeller
- Ændring af tabellen “guru_sample” til “guru_sampleNew”
- Igen, når du udfører kommandoen "show", vil den vise det nye navn guru_sampleNew
Sessionen nedenfor kører alle fem trin i rækkefølge kl. bistade> prompten, og de to SHOW TABLES-kald før og efter omdøbningen gør effekten synlig.
Dropping tabel guru_sampleNy:
En enkelt DROP TABLE-sætning fjerner den omdøbte tabel, og Hive svarer med OK.
Hive CREATE TABLE Syntaks og almindelige klausuler
Eksemplet ovenfor bruger den kortest mulige form. Den dokumenterede sætning accepterer flere valgfrie klausuler, og hver enkelt bestemmer noget, som eksemplet lader være som standard.
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, ...)];
| Klausul | Hvad den kontrollerer |
|---|---|
| EKSTERNT | Opretter en ekstern tabel, så DROP lader datafilerne være på plads |
| MIDLERTIDIG | Opretter en sessionsbestemt tabel, der forsvinder, når sessionen slutter |
| HVIS IKKE FINNES | Undertrykker fejlen, når en tabel med det navn allerede findes |
| OPDELT AF | Opdeler tabellen i én mappe pr. nøgleværdi |
| KLYNGERET EFTER … I n SPANDE | Hasher rækker ind i et fast antal filer |
| RÆKKEFORMAT / GEMT SOM | Angiver afgrænseren eller SerDe og filformatet, f.eks. TEKSTFIL, ORC eller Parquet |
| ADRESSE | Peger tabellen på en specifik HDFS-sti i stedet for lagerets standardsti |
| TBL-EJENDOMME | Vedhæfter metadata-nøgleværdipar, inklusive external.table.purge |
En relateret formular, OPRET TABEL ny_tabel SOM eksisterende_tabel, kopierer et skema uden at kopiere nogen rækker. Strukturelle klausuler som PARTITIONERET AF og KLUSTERET AF er dækket i detaljer i vejledningen til Bistadeskillevægge og spande.
Tabeltyper og dens anvendelse
Når det kommer til tabeller, er det ligesom den måde, vi opretter i traditionelle relationelle databaser. Funktioner som filtrering og joins kan udføres på tabellerne.
Hive håndterer to typer tabelstrukturer, interne og eksterne tabeller, afhængigt af indlæsning og design af skemaet i HiveValget er ikke kosmetisk: det afgør, hvem der ejer datafilerne, og hvad der sker med dem, når tabellen slettes.
Interne tabeller i Hive
- En intern tabel er tæt koblet. I denne type tabel skal vi først oprette tabellen og indlæse dataene.
- Vi kan kalde dette for data på skemaet.
- Ved dråbeping denne tabel, vil både data og skema blive fjernet.
- Den gemte placering af denne tabel vil være på /user/hive/warehouse.
- Interne tabeller kaldes også administrerede tabeller, og kun de understøtter TRUNCATE-, ARCHIVE-, MERGE-, CONCATENATE- og ACID-transaktioner.
Hvornår skal man vælge internt bord?
- Hvis behandlingsdataene er tilgængelige i det lokale filsystem
- Hvis vi ønsker, at Hive skal administrere hele livscyklussen af data, inklusive sletningen
Eksempelkodestykke til internt bord
- Sådan opretter du den interne tabel
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Indlæs dataene i den interne tabel
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Vis indholdet af tabellen
Hive>select * from guruhive_internaltable;
- For at droppe den interne tabel
Hive>DROP TABLE guruhive_internaltable;
Hvis du har slettet guruhive_internaltable, inklusive dens metadata og data, vil filerne blive slettet fra Hive. Medmindre PURGE er angivet, flyttes filerne til HDFS-papirkurven i stedet for at blive fjernet med det samme.
Fra det følgende skærmbillede kan vi se outputtet af alle fire sætninger i én session, der slutter med det vellykkede drop.
I ovenstående kode og fra skærmbilledet gør vi følgende:
- Opret den interne tabel
- Indlæs dataene i den interne tabel
- Vis indholdet af tabellen
- For at droppe den interne tabel
Eksterne tabeller i Hive
- Ekstern tabel er løst koblet af natur. Data vil være tilgængelige i HDFS. Tabellen vil blive oprettet på baggrund af HDFS-data.
- Med andre ord kan vi sige, at det handler om at oprette et skema på data.
- På tidspunktet for faldetping Tabellen fjerner den kun skemaet, dataene vil stadig være tilgængelige i HDFS som før.
- Eksterne tabeller giver mulighed for at oprette flere skemaer for de data, der er gemt i HDFS i stedet for at slette dataene hver gang, når skemaet opdateres
- Fra Hive 4.0.0, vil DROP også slette dataene, hvis tabelegenskaben external.table.purge indstilles til true.
Hvornår skal man vælge eksternt bord?
- Hvis behandlingsdataene er tilgængelige i HDFS
- Nyttigt, når filerne bruges uden for Hive
Eksempelkodestykke til ekstern tabel
- Opret ekstern tabel
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Hvis vi ikke angiver placeringen på tidspunktet for tabellens oprettelse, kan vi indlæse dataene manuelt.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Vis indholdet af tabellen
Hive>select * from guruhive_external;
- Sådan sletter du den eksterne tabel
Hive>DROP TABLE guruhive_external;
Fra følgende skærmbillede kan vi se outputtet. Bemærk, at drop-filen til sidst kun fjerner skemaet – filen under LOCATION-stien forbliver uændret.
I ovenstående kode gør vi følgende
- Opret den eksterne tabel
- Indlæs dataene i ekstern tabel
- Vis indholdet af tabellen
- Dropping ekstern tabel
Forskellen mellem interne vs. eksterne tabeller
| Feature | Intern | Ekstern |
|---|---|---|
| Planlæg | Data om skema | Skema om data |
| Opbevaring placering | /bruger/hive/lager | HDFS-placering angivet af LOCATION |
| Data tilgængelighed | Inden for det lokale filsystem | Inden for HDFS |
| Effekt af DROP | Sletter skema og data | Sletter kun skema, medmindre external.table.purge er sand |
| TRUNCATE-understøttelse | Understøttet | Ikke understøttet |
| SYRE transaktioner | Understøttet | Ikke understøttet |
Apache Hive-dokumentation Angiver reglen tydeligt: Hive antager, at den ejer dataene for administrerede tabeller, og antager, at den ikke gør det for eksterne tabeller, og enhver forskel ovenfor følger af denne ene antagelse.
Kommandoreference til ALTER TABLE og DROP TABLE
Skærmbillederne ovenfor viser kun en omdøbning og en sletning. Disse er de udsagn, en behandler oftest bruger i en eksisterende tabel.
| Statement | Formål |
|---|---|
| ÆNDRE TABEL tabelnavn OMDØDVE TIL nyt_navn; | Omdøber tabellen; for en administreret tabel flytter dette også dens HDFS-mappe |
| ÆNDR TABEL tabelnavn TILFØJ KOLONNER (kolonnenavn datatype); | Tilføjer en eller flere kolonner til slutningen af skemaet |
| ÆNDR TABEL tabelnavn SKIFT KOLONNE gammelt_navn nyt_navn datatype; | Omdøber en kolonne eller ændrer dens type |
| ÆNDR TABEL tabelnavn ERSTAT KOLONNER (…); | Erstatter hele kolonnelisten med en ny |
| ALTER TABLE tabelnavn SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Konverterer en administreret tabel til en ekstern tabel, og FALSE omvender den |
| SLET TABEL [HVIS DEN FINDER] tabelnavn [RYD]; | Fjerner tabellen; PURGE springer papirkurvsmappen over, så dataene ikke kan gendannes |
| AFKORT [TABEL] tabelnavn; | Fjerner alle rækker, men bevarer skemaet; kun administrerede tabeller |
To sikkerhedsforanstaltninger er værd at indbygge i ethvert script. IF EXISTS forhindrer, at en drop fejler på en tabel, der allerede er fjernet, og DESCRIBE FORMATTED bekræfter, om målet er MANAGED_TABLE eller EXTERNAL_TABLE, før drop'en køres.





