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

  • 🧱 MAAK TABEL AAN: Eén enkele instructie definieert de kolommen, de rijindeling en, optioneel, de opslaglocatie van een Hive-tabel.
  • ???? ️ WIJZIG TAFEL: Met RENAME wordt de tabelnaam gewijzigd, en met ADD COLUMNS of CHANGE COLUMN kan het schema worden bewerkt zonder de gegevens opnieuw te laden.
  • 🗑️ TABEL VERWIJDEREN: Valping Een interne tabel verwijdert zowel het schema als de gegevens, terwijl een drop-bewerking dit doet.ping Een externe tabel verwijdert alleen de metadata.
  • 🔒 Intern is eigendom van: Een interne of beheerde tabel bevindt zich in de warehouse-directory en Hive beheert de volledige levenscyclus ervan.
  • 🔗 Er wordt verwezen naar een externe bron: Een externe tabel verwijst naar bestanden die ook door andere tools worden gelezen, zodat die bestanden behouden blijven na de verwijdering.
  • 🔎 Controleer het type: DESCRIBE FORMATTED rapporteert MANAGED_TABLE of EXTERNAL_TABLE, waardoor er geen giswerk meer nodig is vóór een verwijdering.

Hive-opdrachten voor het aanmaken, wijzigen en verwijderen van tabellen, met voorbeelden.

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.

  1. Een tabel genaamd guru_sample aanmaken met twee kolomnamen, bijvoorbeeld "empid" en "empname".
  2. Tabellen weergeven die aanwezig zijn in de guru99-database.
  3. guru_sample wordt weergegeven onder tabellen
  4. De tabel “guru_sample” wordt gewijzigd in “guru_sampleNew”.
  5. 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.

Hive-sessie die guru_sample aanmaakt en hernoemt naar guru_sampleNew.

Valping tabel guru_sampleNew:

Met één enkele DROP TABLE-instructie wordt de hernoemde tabel verwijderd, en Hive antwoordt met OK.

Hive shell dropping de guru_sampleNew-tabel met een OK-reactie

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

  1. Om de interne tabel te creëren
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Laad de gegevens in de interne tabel
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Geef de inhoud van de tabel weer
        Hive>select * from guruhive_internaltable;
  4. 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.

Het aanmaken, laden, opvragen en verwijderen van een Hive-sessie.ping guruhive_interne tabel

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

  1. 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';
  2. 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;
  3. Geef de inhoud van de tabel weer
      Hive>select * from guruhive_external;
  4. 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.

Het aanmaken, laden, opvragen en verwijderen van een Hive-sessie.ping guruhive_external

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.

Veelgestelde vragen

Voer DESCRIBE FORMATTED table_name uit. De rij 'Table Type' geeft aan of het om een ​​MANAGED_TABLE of EXTERNAL_TABLE gaat. Controleren vóór het verwijderen van een tabel is de goedkoopste manier om te voorkomen dat gegevens worden verwijderd die nog door andere processen worden gelezen.

Ja. ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') wijzigt het gegevenstype in de metastore, en FALSE zet het terug. De gegevensbestanden blijven op hun plaats, dus herladen is niet nodig.

Normaal gesproken niet, alleen de metastore-vermelding wordt verwijderd. Vanaf Hive 4.0.0 worden de gegevens van een externe tabel met de eigenschap external.table.purge ingesteld op true echter ook verwijderd door een DROP-bewerking. Controleer daarom eerst de eigenschappen.

Een simpele CREATE TABLE-opdracht produceert nu standaard een beheerde, transactionele ORC-tabel in plaats van een eenvoudige teksttabel. Het toevoegen van het trefwoord EXTERNAL zorgt ervoor dat het oudere, niet-ACID-gedrag behouden blijft op een Hive 3-cluster.

TRUNCATE verwijdert alle rijen, maar behoudt het schema, en werkt alleen op beheerde tabellen. DROP verwijdert ook het schema. TRUNCATE is de veiligere keuze wanneer de tabeldefinitie een herlaadactie moet overleven.

Nee. Hive zet identificatoren in de metastore om naar kleine letters, dus GURU_SAMPLE en guru_sample verwijzen naar dezelfde tabel. Tekstwaarden in de data blijven hoofdlettergevoelig, waardoor een WHERE-vergelijking nog steeds rijen kan missen.

Ja. Machine learning-functies in catalogustools analyseren de kardinaliteit van kolommen, het percentage null-waarden en querypatronen, en stellen vervolgens gegevenstypen, bestandsindelingen en partitiesleutels voor. Beschouw de uitvoer als een concept, omdat het model de geplande workloads niet kan zien.

Copilot vult CREATE-, ALTER- en DROP-instructies aan op basis van een korte opmerking, en agentische assistenten kunnen een volledig migratiescript genereren. RevBekijk het trefwoord EXTERNAL en eventuele PURGE-opties, want een verkeerde inschatting hiervan verwijdert daadwerkelijke gegevens.

Vat dit bericht samen met: