Tabel aanmaken in Hive: Intern, wijzigen en verwijderen met voorbeelden
⚡ Slimme samenvatting
Creëren, wijzigen en laten vallenping Tabellen in Apache Hive gebruiken bekende SQL-achtige DDL, maar het resultaat hangt af van of de tabel intern is (eigendom van Hive) of extern (beschrijft slechts bestanden).
Tabelbewerkingen zoals aanmaken, wijzigen en verwijderen.ping In deze handleiding kunt u zien hoe tabellen in Hive werken. Elke bewerking wordt eerst als een live sessie getoond en vervolgens als een herbruikbare instructie.
Hoe maak je een tabel aan, wijzig je deze en verwijder je deze in Hive?
In de onderstaande schermafbeelding maken we een tabel met kolommen en wijzigen we de tabelnaam.
- Een tabel genaamd guru_sample aanmaken met twee kolomnamen, bijvoorbeeld "empid" en "empname".
- Tabellen weergeven die aanwezig zijn in de guru99-database.
- guru_sample wordt weergegeven onder tabellen
- De tabel “guru_sample” wordt gewijzigd in “guru_sampleNew”.
- Als je het commando "show" uitvoert, wordt de nieuwe naam guru_sampleNew weergegeven.
De onderstaande sessie doorloopt alle vijf stappen in de juiste volgorde. bijenkorf> De prompt en de twee SHOW TABLES-aanroepen vóór en na de hernoeming maken het effect zichtbaar.
Valping tabel guru_sampleNew:
Met één enkele DROP TABLE-instructie wordt de hernoemde tabel verwijderd, en Hive antwoordt met OK.
Syntaxis en veelgebruikte clausules voor het maken van een tabel in Hive
Het bovenstaande voorbeeld gebruikt de kortst mogelijke vorm. De gedocumenteerde instructie accepteert verschillende optionele clausules, en elk daarvan bepaalt iets wat het voorbeeld op de standaardwaarde laat staan.
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, ...)];
| Clausule | Wat het controleert |
|---|---|
| EXTERNE | Hiermee wordt een externe tabel aangemaakt, dus DROP laat de gegevensbestanden intact. |
| TIJDELIJK | Hiermee wordt een tabel aangemaakt die alleen tijdens de sessie geldig is en verdwijnt zodra de sessie eindigt. |
| ALS NIET BESTAAT | Onderdrukt de foutmelding wanneer er al een tabel met die naam bestaat. |
| VERDEELD DOOR | Splitst de tabel op in één map per sleutelwaarde. |
| GEGROEPEERD DOOR … IN n EMMER | Hasht rijen in een vast aantal bestanden |
| RIJFORMAAT / OPGESLAGEN ALS | Hiermee stelt u het scheidingsteken (SerDe) en het bestandsformaat in, zoals TEXTFILE, ORC of Parquet. |
| LOCATIE | Hiermee wordt de tabel gekoppeld aan een specifiek HDFS-pad in plaats van het standaard opslagpad. |
| TBLPROPERTIES | Voegt sleutel-waardeparen voor metadata toe, inclusief external.table.purge |
Een verwante vorm, CREATE TABLE new_table LIKE existing_tableHiermee wordt een schema gekopieerd zonder rijen te kopiëren. Structurele clausules zoals PARTITIONED BY en CLUSTERED BY worden uitgebreid behandeld in de handleiding. Hive-partities en -buckets.
Tabeltypen en het gebruik ervan
Wat tabellen betreft, werkt het net zoals in traditionele relationele databases. Functionaliteiten zoals filteren en joins kunnen op de tabellen worden uitgevoerd.
Hive werkt met twee soorten tabelstructuren: interne en externe tabellen, afhankelijk van het laden en het ontwerp van het schema. BijenkorfDe keuze is niet louter cosmetisch: ze bepaalt wie de eigenaar is van de gegevensbestanden en wat ermee gebeurt wanneer de tabel wordt verwijderd.
Interne tabellen in Hive
- Een interne tabel is van nature sterk gekoppeld. Bij dit type tabel moeten we eerst de tabel aanmaken en vervolgens de gegevens laden.
- Dit kunnen we beschouwen als data op basis van een schema.
- Door druppelping Deze tabel, inclusief zowel de gegevens als het schema, zal worden verwijderd.
- De opgeslagen locatie van deze tabel is /user/hive/warehouse.
- Interne tabellen worden ook wel beheerde tabellen genoemd, en alleen zij ondersteunen TRUNCATE-, ARCHIVE-, MERGE-, CONCATENATE- en ACID-transacties.
Wanneer kies je voor een interne tafel?
- Als de verwerkingsgegevens beschikbaar zijn in het lokale bestandssysteem.
- Als we willen dat Hive de volledige levenscyclus van gegevens beheert, inclusief de verwijdering
Voorbeeldcodefragment voor interne tabel
- Om de interne tabel te creëren
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Laad de gegevens in de interne tabel
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Geef de inhoud van de tabel weer
Hive>select * from guruhive_internaltable;
- Om de interne tabel te verwijderen
Hive>DROP TABLE guruhive_internaltable;
Als je de tabel guruhive_internaltable verwijdert, worden de bijbehorende metadata en gegevens uit Hive verwijderd. Tenzij PURGE is opgegeven, worden de bestanden naar de prullenbakmap van HDFS verplaatst in plaats van direct verwijderd.
Op de volgende schermafbeelding kunnen we de uitvoer van alle vier de statements in één sessie zien, die eindigt met de succesvolle verwijdering.
In de bovenstaande code en zoals te zien is in de schermafbeelding, doen we het volgende:
- Maak de interne tabel
- Laad de gegevens in de interne tabel
- Geef de inhoud van de tabel weer
- Om de interne tabel te verwijderen
Externe tabellen in Hive
- De externe tabel is losjes gekoppeld. De gegevens zijn beschikbaar in HDFS. De tabel wordt aangemaakt op basis van de HDFS-gegevens.
- Met andere woorden, het gaat om het creëren van een schema op basis van data.
- Op het moment van vallenping De tabel wordt alleen verwijderd vanwege het schema; de gegevens blijven gewoon beschikbaar in HDFS.
- Externe tabellen bieden een optie om meerdere schema's te maken voor de gegevens die zijn opgeslagen in HDFS, in plaats van de gegevens elke keer te verwijderen wanneer het schema wordt bijgewerkt
- Vanaf Hive 4.0.0 zorgt het instellen van de tabeleigenschap external.table.purge op true ervoor dat DROP de gegevens ook verwijdert.
Wanneer kiest u voor een externe tafel?
- Als de verwerkingsgegevens beschikbaar zijn in HDFS.
- Handig wanneer de bestanden buiten Hive worden gebruikt
Voorbeeldcodefragment voor externe tabel
- Externe tabel maken
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Als we de locatie niet specificeren tijdens het aanmaken van de tabel, kunnen we de gegevens handmatig laden.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Geef de inhoud van de tabel weer
Hive>select * from guruhive_external;
- Om de externe tabel te verwijderen
Hive>DROP TABLE guruhive_external;
Uit de volgende schermafbeelding kunnen we de uitvoer aflezen. Merk op dat de drop aan het einde alleen het schema verwijdert; het bestand in het pad LOCATION blijft ongewijzigd.
In de bovenstaande code doen we het volgende:
- Maak de externe tabel
- Laad de gegevens in de externe tabel
- Geef de inhoud van de tabel weer
- Valping externe tabel
Verschil tussen interne en externe tabellen
| Kenmerk | Intern | Extern |
|---|---|---|
| Schema | Gegevens over schema | Schema over gegevens |
| Opslaglocatie | /gebruiker/korf/magazijn | HDFS-locatie opgegeven door LOCATIE |
| Beschikbaarheid van data | Binnen het lokale bestandssysteem | Binnen HDFS |
| Effect van DROP | Verwijdert schema en gegevens | Verwijdert alleen het schema, tenzij external.table.purge waar is. |
| TRUNCATE-ondersteuning | ondersteunde | Niet ondersteund |
| ACID-transacties | ondersteunde | Niet ondersteund |
De Apache Hive-documentatie De regel is duidelijk geformuleerd: Hive gaat ervan uit dat het de eigenaar is van de gegevens voor beheerde tabellen en niet voor externe tabellen, en elk verschil hierboven vloeit voort uit die ene aanname.
Referentiehandleiding voor de ALTER TABLE- en DROP TABLE-opdrachten
De bovenstaande schermafbeeldingen tonen alleen een hernoeming en een verwijdering. Dit zijn de acties die een gebruiker het vaakst uitvoert op een bestaande tabel.
| Statement | Doel |
|---|---|
| ALTER TABLE table_name RENAME TO new_name; | De tabelnaam wordt gewijzigd; voor een beheerde tabel wordt hiermee ook de bijbehorende HDFS-directory verplaatst. |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | Voegt een of meer kolommen toe aan het einde van het schema. |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | Hiermee kunt u een kolom hernoemen of het type ervan wijzigen. |
| ALTER TABLE table_name REPLACE COLUMNS (…); | Vervangt de volledige kolomlijst door een nieuwe. |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | Converteert een beheerde tabel naar een externe tabel, en FALSE maakt de conversie ongedaan. |
| DROP TABLE [IF EXISTS] table_name [PURGE]; | Verwijdert de tabel; PURGE slaat de prullenbak over, waardoor de gegevens niet meer hersteld kunnen worden. |
| TRUNCATE [TABEL] tabelnaam; | Verwijdert alle rijen, maar behoudt het schema; alleen beheerde tabellen. |
Twee beveiligingsmaatregelen zijn zeker het overwegen waard in elk script. IF EXISTS voorkomt dat een verwijdering mislukt van een tabel die al is verwijderd, en DESCRIBE FORMATTED controleert of het doel een MANAGED_TABLE of een EXTERNAL_TABLE is voordat de verwijdering wordt uitgevoerd.





