Wat is Hive Query Language? HiveQL Operaverdraaid
โก Slimme samenvatting
Hive Query Language levert de operators die elke HiveQL-expressie aansturen, groeperenping ze indelen in relationele, rekenkundige, logische, complexe-type- en constructorfamilies die samen vergelijking, berekening en toegang tot geneste gegevens omvatten.

Wat is Hive Query Language (HiveQL)?
Hive Query Language (HiveQL) is een querytaal in Apache-bijenkorf Voor het verwerken en analyseren van gestructureerde data. Het ontlast gebruikers van de complexiteit van MapReduce-programmering. Het hergebruikt gangbare concepten uit relationele databases, zoals tabellen, rijen, kolommen en schema's, om het leerproces te vergemakkelijken. Hive biedt een CLI voor het schrijven van Hive-query's met behulp van de Hive Query Language (HiveQL).
De meeste interacties vinden meestal plaats via een opdrachtregelinterface (CLI). Over het algemeen is de syntaxis van HiveQL vergelijkbaar met de SQL Syntaxis die de meeste data-analisten kennen. De vier bestandsformaten die in de oorspronkelijke Hive-documentatie worden genoemd, zijn TEXTFILE, SEQUENCEFILE, ORC en RCFILE (Record Columnar File); de huidige versies kunnen ook Parquet en Avro lezen en schrijven, en ORC is het formaat dat in de meeste optimalisatiehandleidingen wordt gebruikt.
Hive gebruikt een ingebouwde Derby-database voor de opslag van metadata voor individuele gebruikers. Voor implementaties met meerdere gebruikers of gedeelde metastore gebruikt Hive een andere database. MySQL Of gebruik in plaats daarvan een andere externe relationele database, omdat Derby slechts รฉรฉn sessie tegelijk toestaat.
HiveQL ingebouwd Operaverdraaid
Hive biedt ingebouwde operators voor de data-bewerkingen die worden uitgevoerd op de tabellen in het Hive-datawarehouse.
Deze operatoren werken op operanden binnen een expressie en retourneren een waarde volgens de toegepaste logica, of die logica nu een vergelijking, een berekening of een opzoeking in een geneste kolom is.
Hieronder staan โโde belangrijkste typen ingebouwde operators in HiveQL:
- Relationele operatoren
- Rekenkundige operatoren
- logische operatoren
- Operators op complexe typen
- Complexe typeconstructors
Elke familie wordt hieronder in een eigen sectie behandeld, met de volledige operatortabel voor die familie.
relationele Operators in HiveQL
We gebruiken relationele operatoren voor het vergelijken van relaties tussen twee operanden.
- Operastellingen zoals gelijk aan, niet gelijk aan, kleiner dan en groter dan.
- De operandtypen in deze operatoren zijn allemaal primitieve typen, en de patroonherkenningsoperatoren accepteren alleen tekenreeksen.
Elke relationele operator retourneert een BOOLEAN-waarde. Daarom vormen deze operators de basis voor een WHERE-clausule, een JOIN-voorwaarde en een CASE WHEN-structuur. De volgende tabel geeft details over relationele operators en hun gebruik in HiveQL:
| Ingebouwd Operator | Beschrijving | Operand |
|---|---|---|
| X = Y | WAAR als uitdrukking X gelijk is aan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X != Y | WAAR als uitdrukking X niet gelijk is aan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X <Y | WAAR als uitdrukking X kleiner is dan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X <= Y | WAAR als uitdrukking X kleiner dan of gelijk is aan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X > Y | WAAR als uitdrukking X groter is dan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X >= Y | WAAR als uitdrukking X groter is dan of gelijk aan uitdrukking Y. Anders ONWAAR. | Er zijn alle primitieve typen voor nodig |
| X IS NUL | TRUE als expressie X NULL oplevert, anders FALSE. | Er zijn alle soorten nodig |
| X IS NIET NUL | ONWAAR als expressie X NULL oplevert, anders WAAR. | Er zijn alle soorten nodig |
| X ZOALS Y | TRUE als tekenreekspatroon X overeenkomt met Y, anders FALSE. | Neemt alleen snaren |
| X RLIKE Y | NULL als X of Y NULL is, TRUE als een subtekenreeks van X overeenkomt met de Java reguliere expressie Y, anders FALSE. | Neemt alleen snaren |
| X REGEXP Y | Hetzelfde als RLIKE. | Neemt alleen snaren |
Merk op dat een vergelijking met NULL nooit TRUE of FALSE oplevert. Daarom worden IS NULL en IS NOT NULL als aparte operatoren in de tabel vermeld, in plaats van te verwachten dat X = NULL werkt.
HiveQL-rekenkunde Operaverdraaid
We gebruiken rekenkundige operatoren om rekenkundige bewerkingen op operanden uit te voeren.
- Rekenkundige bewerkingen zoals optellen en aftrekkentracBij bewerkingen zoals vermenigvuldiging en deling tussen operanden worden deze operatoren gebruikt.
- De operandtypen in deze operatoren zijn allemaal numerieke typen.
Voorbeeld:
2 + 3 geeft als resultaat 5.
In dit voorbeeld is '+' de operator, 2 en 3 zijn de operanden en de retourwaarde is 5.
De volgende tabel geeft details over rekenkundige operatoren in de Hive-querytaal:
| Ingebouwd Operator | Beschrijving | Operand |
|---|---|---|
| X+Y | Het retourneert de uitvoer van het toevoegen van X- en Y-waarden. | Er zijn alle nummertypen nodig |
| X โ Y | Het zal de uitvoer van sub retourneren.tracY afleiden uit de X-waarde. | Er zijn alle nummertypen nodig |
| X * Y | Het retourneert de uitvoer van het vermenigvuldigen van X- en Y-waarden. | Er zijn alle nummertypen nodig |
| X/Y | Het retourneert de uitvoer van het delen van Y door X. | Er zijn alle nummertypen nodig |
| X% Y | Het retourneert de rest die het resultaat is van het delen van X door Y. | Er zijn alle nummertypen nodig |
| X & Y | Het retourneert de uitvoer van de bitgewijze AND van X en Y. | Er zijn alle nummertypen nodig |
| X | ja | Het retourneert de uitvoer van een bitgewijze OF van X en Y. | Er zijn alle nummertypen nodig |
| X ^ Y | Het retourneert de uitvoer van bitgewijze XOR van X en Y. | Er zijn alle nummertypen nodig |
| ~X | Het retourneert de uitvoer van bitgewijs NOT van X. | Er zijn alle nummertypen nodig |
De laatste vier rijen zijn bitwise in plaats van gewone rekenkundige bewerkingen: ze werken met de binaire representatie van gehele getallen, dus &, | en ^ zijn niet hetzelfde als de logische EN, OF en NIET die in de volgende sectie worden behandeld.
HiveQL Logisch Operaverdraaid
We gebruiken logische operatoren om logische bewerkingen op operanden uit te voeren.
- Logische bewerkingen zoals EN, OF en NIET tussen operanden maken gebruik van deze operatoren.
- De operandtypen in deze operatoren zijn allemaal van het type BOOLEAN.
De volgende tabel geeft details over logische operatoren in HiveQL:
| Operaverdraaid | Beschrijving | Operands |
|---|---|---|
| X EN Y | WAAR als zowel X als Y WAAR zijn, anders ONWAAR. | Alleen Booleaanse typen |
| X && Y | Hetzelfde als X EN Y, maar hier gebruiken we het symbool &&. | Alleen Booleaanse typen |
| X OF Y | WAAR als X of Y of beide WAAR zijn, anders ONWAAR. | Alleen Booleaanse typen |
| X || ja | Hetzelfde als X OF Y, maar hier gebruiken we het symbool ||. | Alleen Booleaanse typen |
| NIET X | WAAR als X ONWAAR is, anders ONWAAR. | Alleen Booleaanse typen |
| !X | Hetzelfde als NOT X, maar hier gebruiken we het !-symbool. | Alleen Booleaanse typen |
Omdat relationele operatoren BOOLEAN-waarden retourneren, zijn het logische operatoren die ze combineren: een predicaat zoals salary > 50000 AND dept = 'Sales' koppelt de ene familie aan de andere.
Operators op complexe typen
Relationele, rekenkundige en logische operatoren werken allemaal met enkele scalaire waarden. Hive slaat ook array-, map- en structkolommen op, en daarvoor is een ander mechanisme nodig om de elementen erin te benaderen. De volgende tabel geeft details over operatoren voor complexe gegevenstypen, die dit mechanisme bieden:
| Operaverdraaid | Operands | Beschrijving |
|---|---|---|
| Een] | A is een array en n is een geheel getal | Het retourneert het n-de element in de array A. Het eerste element heeft index 0. |
| M[sleutel] | M is een kaart en sleutel heeft type K | Het retourneert de waarde die bij de sleutel in de map hoort. |
Beide vormen zijn gewone expressies, dus ze kunnen voorkomen in een SELECT-lijst, een WHERE-clausule of een GROUP BY, en een struct-veld wordt benaderd met puntnotatie zoals S.field in plaats van een haakje.
Complexe typeconstructeurs
Waar de bovenstaande operators een bestaande complexe kolom lezen, bouwen constructors er een. De volgende tabel geeft details over constructors voor complexe gegevenstypen, die instanties van de complexe gegevenstypen Array, Map en Struct in Hive creรซren.
In dit gedeelte gaan we de bewerkingen bekijken die worden uitgevoerd op constructors van complexe gegevenstypen.
| Operaverdraaid | Operands | Beschrijving |
|---|---|---|
| reeks | (val1, val2, โฆ) | Het zal een array creรซren met de opgegeven elementen zoals aangegeven, bijvoorbeeld val1, val2. |
| create_union | (tag, val1, val2, โฆ) | Het zal een union-type creรซren met de waarde waarnaar wordt verwezen door de tag-parameter. |
| kaart | (sleutel1, waarde1, sleutel2, waarde2, โฆ) | Het zal een kaart maken met de opgegeven sleutel/waarde-paren uit de operanden. |
| benoemde structuur | (naam1, val1, naam2, val2, โฆ) | Het zal een structuur creรซren met de opgegeven veldnamen en waarden die in de operanden worden vermeld. |
| struct | (val1, val2, val3, โฆ) | Hiermee wordt een structuur aangemaakt met de opgegeven veldwaarden. De veldnamen van de structuur zullen col1, col2, enzovoort zijn. |
Constructors worden meestal gebruikt in een INSERT-query die een complexe kolom vult, of in een SELECT-query die meerdere scalaire kolommen in รฉรฉn structuur combineert voordat het resultaat naar een andere tabel wordt geschreven.
Ingebouwde HiveQL-functies
OperaTors behandelen vergelijking, berekening en toegang tot elementen, maar ze ronden geen getallen af, korten geen tekenreeks in en voeren geen substitutie uit.tract twee datums. Dat werk behoort tot de ingebouwde functies van Hive, die met hun naam worden aangeroepen binnen dezelfde expressies waarin de operatoren voorkomen. De onderstaande tabel groepeert de families die een beginner als eerste tegenkomt.
| Functiefamilie | Typische leden | Waarvoor het gebruikt wordt |
|---|---|---|
| wiskundig | round(), floor(), ceil(), abs(), pow(), sqrt(), rand() | Afronding, machtsverheffing en andere numerieke berekeningen op een enkele kolomwaarde. |
| Draad | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Reinigen, snoeien en opnieuw vormgevenping tekst voordat deze wordt vergeleken of gegroepeerd. |
| Datum | huidige_datum, jaar(), maand(), gedateerd verschil(), datum_toevoegen(), unix_timestamp() | Extrachet tellen van datumonderdelen en het meten van intervallen tussen twee datums. |
| Voorwaardelijk | if(), CASE WHEN, coalesce(), nvl(), isnull() | Een waarde kiezen op rijniveau en NULL vervangen door een terugvalwaarde. |
| Collectie | grootte(), kaartsleutels(), kaartwaarden(), array bevat(), sortering van array() | De array-, map- en structkolommen die door de complexe-type-operatoren worden bereikt, worden gecontroleerd. |
| Typ conversie | cast(), binair() | Een kolom forceren naar het type dat een operator verwacht. |
| Aggregaat (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Het samenvoegen van meerdere rijen tot รฉรฉn waarde, meestal in combinatie met GROUP BY. |
De lijst met functies is afhankelijk van de Hive-release, dus het is de moeite waard om deze vanuit de sessie zelf te lezen in plaats van vanuit een statische pagina. Twee statements doen dat:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
SHOW FUNCTIONS geeft een lijst van alle geregistreerde namen, DESCRIBE FUNCTION print de functiesignatuur op รฉรฉn regel, en de EXTENDED-vorm voegt gebruiksvoorbeelden toe waar de implementerende klasse deze levert. Wanneer geen ingebouwde functie geschikt is, accepteert Hive een door de gebruiker gedefinieerde functie geschreven in Java.
HiveQL versus SQL: Belangrijkste verschillen
HiveQL leent bewust SQL-syntaxis, en de bovenstaande operatortabellen zullen bekend voorkomen voor iedereen die ooit SQL heeft geschreven. Het onderliggende uitvoeringsmodel is echter niet hetzelfde, en de verschillen worden duidelijk zodra een query verder gaat dan een simpele SELECT.
| Gedrag | HiveQL | Traditionele SQL (RDBMS) |
|---|---|---|
| Schemaverwerking | Schema bij het lezen โ het schema wordt toegepast wanneer het bestand wordt opgevraagd. | Schema bij schrijven โ het schema wordt afgedwongen wanneer de rij wordt ingevoegd. |
| UPDATE en DELETE op rijniveau | Ondersteund alleen voor ACID-tabellen; beheerde tabellen zijn standaard ACID vanaf Hive 3.0. | Standaard ondersteund op elke tabel |
| Indexen | De ondersteuning voor indexen is verwijderd in Hive 3.0 (HIVE-18448); ORC- of Parquet-bestandsindexen en gematerialiseerde weergaven hebben deze vervangen. | B-tree en andere secundaire indexen zijn een kernonderdeel. |
| Uitvoering en latentie | Compileert naar batchtaken op Tez, MapReduce of SparkDus zelfs kleine zoekopdrachten brengen opstartkosten met zich mee. | Interactieve uitvoering, meestal in milliseconden. |
| Ontwerpdoel | Doorvoersnelheid bij zeer grote bestanden op HDFS of een objectopslag. | Lezen en schrijven met lage latentie op รฉรฉn server of cluster. |
De praktische consequentie voor expressief schrijven is klein, maar wel degelijk aanwezig. OperaTors gedragen zich zoals verwacht, maar een predicaat dat in een relationele database beantwoord zou worden met behulp van een index, wordt in Hive beantwoord door bestanden te scannen. Daarom is filteren op een partitiekolom meestal veel waardevoller dan het optimaliseren van de operator zelf.
