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.

  • ๐Ÿงฎ Vijf operatorfamilies: Relationele, rekenkundige, logische, complexe-type- en constructoroperatoren dekken elke expressie die een HiveQL-query nodig heeft.
  • ๐Ÿ” Vergelijking kan elk primitief element bevatten: Relationele operatoren accepteren alle primitieve gegevenstypen, terwijl LIKE, RLIKE en REGEXP alleen op tekenreeksen werken.
  • โž• Rekenen omvat bitwise-bewerkingen: Naast de vier basisbewerkingen biedt HiveQL ook modulo-bewerkingen en bitwise AND-, OR-, XOR- en NOT-bewerkingen op numerieke gegevenstypen.
  • ๐Ÿงฉ Geneste gegevens hebben een eigen syntaxis: A[n] verwijst naar een element in een array en M[key] verwijst naar een waarde in een map; beide zijn overal bruikbaar waar een expressie is toegestaan.
  • ???? ๏ธ Constructors bouwen complexe waarden: array(), map(), struct(), named_struct() en create_union() stellen complexe kolommen samen binnen een query.
  • ๐Ÿ“š Functies breiden de operatoren uit: Wiskundige, tekenreeks-, datum-, voorwaardelijke, verzamelings- en aggregatiefuncties verwerken taken die niet door een operator worden gedekt.

Wat zijn Hive Query Language (HiveQL) operators?

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.

Veelgestelde vragen

Trefwoorden, operatorwoorden zoals AND of LIKE, en functienamen worden hoofdletterongevoelig opgelost, dus SELECT en select gedragen zich hetzelfde. Tekstgegevens niet: het vergelijken van 'Sales' met 'sales' geeft FALSE terug, tenzij eerst upper() of lower() wordt toegepast.

X / Y geeft altijd een DOUBLE terug, zelfs als beide operanden gehele getallen zijn, dus 7 / 2 geeft 3.5 in plaats van 3. Gebruik het trefwoord DIV voor gehele deling en de operator % voor de rest.

Rekenkundige en vergelijkingsoperatoren propageren NULL: elke expressie die NULL bevat, resulteert in NULL, niet in FALSE. Test met IS NULL of IS NOT NULL en vervang de waarde door een fallback met coalesce() of nvl() voordat de waarde een operator bereikt.

LIKE gebruikt SQL-jokertekens, waarbij % overeenkomt met elke reeks tekens en _ met รฉรฉn. RLIKE komt overeen met een Java Een reguliere expressie die wordt vergeleken met een willekeurige deelreeks van de waarde. REGEXP is een synoniem voor RLIKE en werkt identiek.

Rekenkundige operatoren worden eerst gebonden, dan vergelijkingsoperatoren, dan NOT, dan AND en dan OR. Omdat de volgorde in lange predicaten gemakkelijk verkeerd kan worden geรฏnterpreteerd, worden haakjes aanbevolen wanneer AND en OR in dezelfde clausule voorkomen.

Ja. Relationele en logische operatoren vormen joinvoorwaarden, rekenkundige operatoren kunnen groeperingsvoorwaarden produceren.ping Sleutels en toegang tot complexe gegevenstypen zoals M[sleutel] zijn geldig overal waar een expressie is toegestaan, inclusief SELECT-lijsten, WHERE-clausules en ORDER BY.

Machine learning-assistenten vertalen een filter in gewone taal naar een kandidaat-predicaat en signaleren typefouten, zoals het vergelijken van een tekenreekskolom met een getal. Controleer de gegenereerde operator altijd aan de hand van de bovenstaande tabellen, omdat de dialecten binnen Hive verschillen. Spark SQL en Presto.

Het kan goed overweg met veelvoorkomende predicaten en suggereert coalesce() of CASE WHEN-patronen op basis van een korte opmerking. Het combineert ook syntax van andere engines, dus controleer bitwise-operatoren, toegang tot complexe gegevenstypen en elke functienaam met DESCRIBE FUNCTION voordat u de query uitvoert.

Vat dit bericht samen met: