Hive-gegevenstypen: databases maken en verwijderen in Hive

⚔ Slimme samenvatting

Hive-datatypen definiƫren wat elke tabelkolom kan bevatten, en de commando's CREATE DATABASE en DROP DATABASE stellen de naamruimte waarin die tabellen zich bevinden binnen de Hive-metastore in of verwijderen deze.

  • šŸ”¢ Numerieke typen: TINYINT tot en met BIGINT omvatten hele getallen, terwijl DECIMAL(precision, scale) exacte waarden behoudt die FLOAT en DOUBLE niet kunnen.
  • šŸ”¤ Stringtypen: STRING heeft geen vastgestelde limiet, VARCHAR accepteert 1 tot 65535 tekens en CHAR is vast ingesteld op maximaal 255 tekens.
  • šŸ“… Datum en tijd: DATE slaat een eenvoudige waarde op in het formaat JJJJMM-DD, en TIMESTAMP voegt daar optioneel nanoseconde-precisie aan toe.
  • 🧩 Complexe typen: ARRAY, MAP, STRUCT en UNIONTYPE bundelen meerdere gerelateerde waarden in ƩƩn kolom in plaats van in meerdere.
  • ???? ļø Een database maken: Met CREATE DATABASE wordt een naamruimte in de metastore geregistreerd, en met SHOW DATABASES wordt bevestigd dat deze bestaat.
  • šŸ—‘ļø Een database verwijderen: DROP DATABASE verwijdert de namespace, en CASCADE is vereist wanneer er nog tabellen in die namespace aanwezig zijn.

Hive-datatypen en hoe je databases in Hive aanmaakt en verwijdert.

Gegevenstypen zijn zeer belangrijke elementen in de Hive-querytaal en datamodellering. Om de gegevenstypen van tabelkolommen te definiƫren, moeten we de gegevenstypen en hun gebruik kennen.

Hieronder volgt een kort overzicht van enkele gegevenstypen die in Hive aanwezig zijn:

  • Numerieke typen
  • String-typen
  • Datum-/tijdtypen
  • Complexe typen

Gegevenstypen in Hive

Elke Hive-kolom wordt gedeclareerd met een van de onderstaande typen. De primitieve typen komen eerst, gevolgd door de complexe typen die meer dan ƩƩn waarde in een enkele kolom kunnen bevatten.

Hive numerieke gegevenstypen

Numerieke kolommen variƫren van ƩƩn tot acht bytes, dus door het kleinste type te kiezen dat bij de waarden past, blijven zowel de opslag- als de scankosten laag.

Type Geheugentoewijzing
KLEINEINT 1-byte geheel getal met teken (-128 tot 127)
KLEIN 2-byte geheel getal met teken (-32,768 tot 32,767)
INT 4-byte geheel getal met teken (-2,147,483,648 tot 2,147,483,647)
BIGINT 8-byte geheel getal met teken (-9,223,372,036,854,775,808 tot 9,223,372,036,854,775,807)
FLOAT 4-byte drijvende-komma getal met enkelvoudige precisie
DUBBELE 8-byte dubbele precisie drijvende-komma getal
DECIMALE We kunnen precisie en schaal in dit type definiƫren als DECIMAL(precisie, schaal). Als deze worden weggelaten, gebruikt Hive DECIMAL(10,0).

Hive-tekenreeksgegevenstypen

Tekstkolommen zijn er in drie vormen, en het verschil zit hem in de vraag of Hive een opgegeven lengte afdwingt.

Type Lengte
CHAR Vaste lengte, tot 255 tekens. Kortere waarden worden aangevuld met spaties.
VARCHAR 1 tot 65,535 tekens. Een langere waarde wordt stilzwijgend afgekapt.
STRING We kunnen hier een lengte definiƫren (geen limiet).

Datum-/tijdgegevenstypen voor Hives

Tijdskolommen worden opgeslagen zonder tijdzone-offset, iets om te onthouden bij het vergelijken van waarden die door verschillende clusters zijn geschreven.

Type Gebruik
Tijdstempel Ondersteunt traditioneel Unix tijdstempel met optionele nanosecondeprecisie
Datum Het heeft de volgende indeling: JJJJ-MM-DD.
Het bereik van ondersteunde waarden voor het datumtype is 0000-01-01 tot 9999-12-31, afhankelijk van de ondersteuning door de primitieve gegevenstype. Java typische datum

Diverse gegevenstypen voor Hive

Twee andere basistypen vallen buiten de numerieke, tekenreeks- en datumfamilies, maar komen wel regelmatig voor in echte schema's.

Type Gebruik
BOOLAAN Slaat waar of onwaar op.
BINARY Slaat een byte-array op, waardoor de onbewerkte inhoud buiten een STRING-kolom blijft.

Complexe gegevenstypen van Hive

Bij complexe gegevenstypen worden waarden binnen ƩƩn kolom genest, waardoor de extra join die bij een relationeel ontwerp nodig zou zijn, overbodig wordt.

Type Gebruik
arrays ARRAY
Negatieve waarden en niet-constante uitdrukkingen zijn niet toegestaan
Maps KAART
Negatieve waarden en niet-constante uitdrukkingen zijn niet toegestaan
structuren STRUCT
Unie UNIONTYPE

Voorbeeld van complexe gegevenstypen in Hive

De bovenstaande tabel toont de declaratievorm. De onderstaande instructie plaatst drie van de complexe typen in ƩƩn tabel, zodat de scheidingsclausules en de toegangssyntaxis samen zichtbaar zijn.

CREATE TABLE employees (
  name      STRING,
  skills    ARRAY<STRING>,
  deductions MAP<STRING, FLOAT>,
  address   STRUCT<street:STRING, city:STRING, pin:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Hier zijn drie afzonderlijke scheidingstekens nodig: ƩƩn tussen kolommen, een tweede tussen de elementen van een array of structuur, en een derde tussen een sleutel en de bijbehorende waarde in een map. Zodra de tabel bestaat, wordt elke complexe kolom gelezen met een eigen accessor.

SELECT name, skills[0], deductions['tax'], address.city
FROM employees;

De onderstaande tabel geeft een overzicht van welke accessor bij welk type hoort.

Type Hoe een waarde wordt gelezen
ARRAY Nulgebaseerde index, zoals vaardigheden[0]
MAP Sleutelopzoeking tussen vierkante haken, zoals aftrekposten['belasting']
STRUCT Puntnotatie in de veldnaam, bijvoorbeeld address.city
UNIONTYPE Wordt zelden gebruikt, omdat de queryondersteuning ervoor onvolledig is gebleven.

Complexe gegevenstypen kunnen genest zijn, dus ARRAY > is een geldige kolomdeclaratie. Zodra de kolomindeling is vastgesteld, worden de tabellen zelf opgebouwd met de instructies die in Hive-tabel aanmaken, wijzigen en verwijderen.

Databases maken en verwijderen in Hive

Een database in Hive is simpelweg een naamruimte die tabellen groepeert. Het is daarom het eerste object dat je aanmaakt voordat je met tabellen begint. Hieronder volgen de stappen voor het aanmaken en verwijderen van databases in Hive.

Stap 1) Een database aanmaken in Hive

Om een ​​database in de Hive-shell aan te maken, moeten we de opdracht gebruiken zoals weergegeven in de onderstaande syntax:

Syntax:

Create database <DatabaseName>

Voorbeeld: Maak de database ā€œguru99ā€ aan.

De onderstaande schermafbeelding toont de CREATE-instructie, gevolgd door een SHOW-opdracht die alle databases in het cluster weergeeft.

Hive shell maakt de guru99-database aan en toont de databases met show.

Uit de bovenstaande schermafbeelding blijkt dat we twee dingen doen:

  1. Database ā€œguru99ā€ maken in Hive
  2. Bestaande databases weergeven met behulp van het commando "show".

Op hetzelfde scherm wordt aan het einde, na het uitvoeren van het commando 'show', de database 'guru99' weergegeven. Dit betekent dat de database 'guru99' succesvol is aangemaakt.

Stap 2) Verwijder de database in Hive.

Voor dropping Om een ​​database in de Hive-shell te verwijderen, moeten we het commando "drop" gebruiken, zoals in de onderstaande syntax wordt weergegeven:

Syntax:

Drop database <DatabaseName>

Voorbeeld: Verwijder de database guru99

In de volgende schermafbeelding wordt eerst de drop-instructie uitgevoerd, en de daaropvolgende show-opdracht geeft de database niet meer weer.

Hive shell dropping de guru99-database en het bevestigen van verwijdering met show

In de bovenstaande schermafbeelding doen we twee dingen:

  1. We droppen af.ping database 'guru99' van Hive
  2. Controleer dit ook met het commando "show".

Op hetzelfde scherm, na het controleren van de databases met het commando 'show', verschijnt database 'guru99' niet meer in Hive. We kunnen dus nu bevestigen dat database 'guru99' is verwijderd.

Hive-databaseopdrachten: USE, DESCRIBE, SHOW en ALTER DATABASE

De twee bovenstaande verklaringen gebruiken hun kortste vorm. De gedocumenteerde syntaxis bevat optionele clausules die bepalen waar de bestanden terechtkomen en wat er gebeurt als de naam al in gebruik is.

CREATE DATABASE [IF NOT EXISTS] database_name
  [COMMENT database_comment]
  [LOCATION hdfs_path]
  [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];

De sleutelwoorden DATABASE en SCHEMA zijn overal uitwisselbaar, dus CREATE SCHEMA en CREATE DATABASE doen precies hetzelfde. De overige commando's vullen de dagelijkse werkzaamheden met een namespace aan.

commando Wat het doet
TOON DATABANKEN; Geeft een lijst van alle databases die in de metastore zijn geregistreerd.
GEBRUIK databasenaam; Stelt de huidige database zo in dat tabelnamen geen voorvoegsel meer nodig hebben.
BESCHRIJF DATABASE database_naam; Rapporteert de opmerking, de HDFS-locatie en de eigenaar.
BESCHRIJF DATABASE UITGEBREID database_naam; Voegt de DBPROPERTIES-sleutel-waardeparen toe aan die uitvoer.
ALTER DATABASE database_name SET DBPROPERTIES (…); Voegt metagegevenseigenschappen toe of vervangt deze.
ALTER DATABASE database_name SET OWNER USER user_name; Draagt ​​het eigendom over aan een andere gebruiker of rol.
ALTER DATABASE database_name SET LOCATION hdfs_path; Wijzigt het pad dat wordt gebruikt door tabellen die vanaf dat moment worden aangemaakt.

Twee standaardinstellingen zijn het onthouden waard. Zonder een LOCATION-clausule bevinden de bestanden zich in de warehouse-directory, normaal gesproken /user/hive/warehouse/database_name.db, en zonder IF EXISTS leidt het verwijderen van een bestand met een ontbrekende naam tot een foutmelding in plaats van dat het bestand zonder problemen wordt verwijderd. Beide instellingen worden bewaard in het bestand. Hive metastore.

Conversie van gegevenstypen in Hive en veelvoorkomende fouten

Typen worden niet altijd exact gebruikt zoals ze zijn gedeclareerd. Hive verbreedt een waarde automatisch wanneer er geen informatie verloren kan gaan, en laat alle andere gevallen over aan een expliciete conversie.

  • Impliciete verbreding volgt de keten TINYINT naar SMALLINT naar INT naar BIGINT naar FLOAT naar DOUBLE, en een STRING die cijfers bevat, wordt gepromoveerd naar DOUBLE.
  • Een versmalling vindt nooit vanzelf plaats, dus een DOUBLE die aan een INT-kolom is toegewezen, vereist een schriftelijke conversie.
  • CAST voert die geschreven conversie uit en retourneert NULL in plaats van een foutmelding wanneer de waarde niet kan worden geconverteerd.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;

De onderstaande fouten verklaren de meeste verrassingen waar beginners tegenaan lopen bij hun eerste schema.

Symptoom Oorzaak en oplossing
Het verwijderen van tabellen mislukt terwijl de database nog steeds tabellen bevat. RESTRICT is de standaardinstelling. Voeg CASCADE toe om de tabellen te verwijderen.
Een lange snaar komt ingekort aan. VARCHAR wordt stilzwijgend afgekapt na de opgegeven lengte. Gebruik STRING als er geen limiet gewenst is.
Een kolom wordt na een conversie als NULL weergegeven. CAST kon de waarde niet parseren. Controleer de brongegevens voordat u het type uitbreidt.
De waarde van valuta's verliest zijn paise of cent. DECIMAL zonder argumenten betekent DECIMAL(10,0). Geef de schaal expliciet aan.
Twee identiek uitziende dates komen nooit overeen. Een datumkolom van het type STRING en een datumkolom van het type DATE zijn verschillende gegevenstypen. Converteer ƩƩn van beide typen voordat u ze vergelijkt.

Zodra de gegevenstypen correct functioneren, is de volgende stap het laden en opvragen van de gegevens zelf, wat wordt behandeld in Hive-query's met ORDER BY, GROUP BY en Cluster By.

Veelgestelde vragen

Nee. DATABASE en SCHEMA zijn in HiveQL uitwisselbare trefwoorden, dus CREATE SCHEMA sales en CREATE DATABASE sales produceren hetzelfde metastore-object. De keuze is puur een kwestie van huisstijl.

De database bevindt zich normaal gesproken in de warehouse-directory, op HDFS als /user/hive/warehouse/database_name.db. Een LOCATION-clausule in CREATE DATABASE overschrijft dit pad, en DESCRIBE DATABASE rapporteert de locatie die daadwerkelijk is gebruikt.

STRING is de gebruikelijke keuze omdat er geen limiet is vastgelegd en er geen opvulling nodig is. VARCHAR is handig wanneer een lengte moet worden afgedwongen, en CHAR is geschikt voor korte codes met een vaste breedte, zoals landafkortingen.

DOUBLE is een binair drijvende-komma getal, waardoor herhaalde sommen met fracties van een cent kunnen afwijken. DECIMAL slaat exacte waarden op met een opgegeven precisie en schaal, waardoor financiƫle totalen reproduceerbaar blijven bij verschillende berekeningen.

Een gewone TIMESTAMP is tijdzone-onafhankelijk en wordt exact zo teruggelezen als geschreven. Hive 3.1 voegde TIMESTAMP WITH LOCAL TIME ZONE toe, die de waarde normaliseert naar UTC bij het schrijven en converteert bij het lezen.

Ja. Een STRUCT kan zich binnen een ARRAY bevinden en een MAP-waarde kan zelf een STRUCT zijn, dus ARRAY > is geldig in BijenkorfDiep geneste structuren maken het gebruik van scheidingstekens ingewikkelder, dus houd het oppervlakkig.

Ja. Data-profileringstools analyseren de kardinaliteit, het percentage null-waarden en de waardebereiken, en stellen vervolgens het meest geschikte gegevenstype en bestandsformaat voor. Beschouw de suggestie als een concept, omdat het model geen rekening kan houden met toekomstige werkbelastingen.

Copilot genereert CREATE TABLE- en CREATE DATABASE-instructies op basis van een korte opmerking, en agentische assistenten kunnen een voorbeeldbestand omzetten in een schema. Controleer altijd de DECIMAL-schaal en de scheidingstekens voordat u het resultaat uitvoert.

Vat dit bericht samen met: