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.
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.
Uit de bovenstaande schermafbeelding blijkt dat we twee dingen doen:
- Database āguru99ā maken in Hive
- 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.
In de bovenstaande schermafbeelding doen we twee dingen:
- We droppen af.ping database 'guru99' van Hive
- 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.



