Hva er Hive Query Language? HiveQL Operatorer
โก Smart oppsummering
Hive Query Language leverer operatorene som driver hvert HiveQL-uttrykk, gruppeping dem inn i relasjonelle, aritmetiske, logiske, kompleks-type og konstruktรธrfamilier som til sammen dekker sammenligning, beregning og tilgang til nestede data.

Hva er Hive Query Language (HiveQL)?
Hive Query Language (HiveQL) er et spรธrringssprรฅk i Apache Hive for behandling og analyse av strukturerte data. Det skiller brukere fra kompleksiteten ved MapReduce-programmering. Det gjenbruker vanlige konsepter fra relasjonsdatabaser, for eksempel tabeller, rader, kolonner og skjemaer, for รฅ forenkle lรฆringen. Hive tilbyr et CLI for Hive-spรธrringsskriving ved hjelp av Hive Query Language (HiveQL).
De fleste interaksjoner har en tendens til รฅ foregรฅ over et kommandolinjegrensesnitt (CLI). Generelt er HiveQL-syntaksen lik SQL syntaks som de fleste dataanalytikere er kjent med. De fire filformatene som er nevnt i den originale Hive-dokumentasjonen er TEXTFILE, SEQUENCEFILE, ORC og RCFILE (Record Columnar File); nรฅvรฆrende utgivelser leser og skriver ogsรฅ Parquet og Avro, og ORC er formatet som de fleste tuningveiledninger antar.
Hive bruker en innebygd Derby-database for lagring av metadata for รฉn bruker. For distribusjoner av flere brukere eller delte metastorer bruker Hive MySQL eller en annen ekstern relasjonsdatabase i stedet, fordi Derby bare tillater รฉn รธkt om gangen.
HiveQL innebygd Operatorer
Hive har innebygde operatorer for dataoperasjonene som kjรธrer mot tabellene som ligger i Hive-lageret.
Disse operatorene fungerer pรฅ operander i et uttrykk og returnerer en verdi i henhold til logikken som brukes, enten logikken er en sammenligning, en beregning eller et oppslag i en nestet kolonne.
Nedenfor er hovedtypene av innebygde operatorer i HiveQL:
- Relasjonsoperatorer
- Aritmetiske operatรธrer
- logiske operatorer
- Operatorer pรฅ komplekse typer
- Komplekse typekonstruktรธrer
Hver familie er dekket i sin egen seksjon nedenfor, med den fullstendige operatortabellen for den familien.
Relasjonelt Operatorer i HiveQL
Vi bruker relasjonsoperatorer for รฅ sammenligne relasjoner mellom to operander.
- Operatorer som lik, ikke lik, mindre enn og stรธrre enn.
- Operandtypene er alle primitive typer i disse operatorene, og mรธnstersamsvarsoperatorene godtar bare strenger.
Hver relasjonsoperator returnerer en BOOLESK verdi, og det er derfor disse operatorene er det en WHERE-klausul, en JOIN-betingelse og en CASE WHEN-gren er bygget opp fra. Tabellen nedenfor gir detaljer om relasjonsoperatorer og bruken av dem i HiveQL:
| Innebygd Operator | Tekniske beskrivelser | Operand |
|---|---|---|
| X = Y | SANN hvis uttrykk X er ekvivalent med uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X != Y | SANN hvis uttrykk X ikke er ekvivalent med uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X < Y | SANN hvis uttrykk X er mindre enn uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X <= Y | SANN hvis uttrykk X er mindre enn eller lik uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X > Y | SANN hvis uttrykk X er stรธrre enn uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X >= Y | SANN hvis uttrykk X er stรธrre enn eller lik uttrykk Y. Ellers USANN. | Det tar alle primitive typer |
| X ER NULL | SANN hvis uttrykk X evalueres til NULL, ellers USANN. | Det tar alle typer |
| X ER IKKE NULL | USANN hvis uttrykk X evalueres til NULL, ellers SANN. | Det tar alle typer |
| X LIKER Y | SANN hvis strengmรธnster X samsvarer med Y, ellers USANN. | Tar bare strenger |
| X RLIKE Y | NULL hvis X eller Y er NULL, TRUE hvis en delstreng av X samsvarer med Java regulรฆrt uttrykk Y, ellers FALSE. | Tar bare strenger |
| X REGEXP Y | Samme som RLIKE. | Tar bare strenger |
Merk at en sammenligning mot NULL aldri returnerer TRUE eller FALSE. Det er grunnen til at tabellen viser IS NULL og IS NOT NULL som separate operatorer i stedet for รฅ forvente at X = NULL skal fungere.
HiveQL aritmetikk Operatorer
Vi bruker aritmetiske operatorer for รฅ utfรธre aritmetiske operasjoner pรฅ operander.
- Aritmetiske operasjoner som addisjon, subtilitettracsjon, multiplikasjon og divisjon mellom operander bruker disse operatorene.
- Operandtypene er alle talltyper i disse operatorene.
Eksempeleksempel:
2 + 3 gir resultatet 5.
I dette eksemplet er '+' operatoren, 2 og 3 er operandene, og returverdien er 5.
Tabellen nedenfor gir detaljer om aritmetiske operatorer i Hive Query Language:
| Innebygd Operator | Tekniske beskrivelser | Operand |
|---|---|---|
| X+Y | Det vil returnere utdata for รฅ legge til X- og Y-verdier. | Den tar alle talltyper |
| X โ Y | Den vil returnere utdataene fra subtracY-verdi fra X-verdi. | Den tar alle talltyper |
| X * Y | Det vil returnere utdataene ved รฅ multiplisere X- og Y-verdier. | Den tar alle talltyper |
| X / Y | Det vil returnere utgangen ved รฅ dele Y fra X. | Den tar alle talltyper |
| X % Y | Det vil returnere resten som er et resultat av รฅ dele X med Y. | Den tar alle talltyper |
| X & Y | Det vil returnere utgangen av bitvis AND av X og Y. | Den tar alle talltyper |
| X | Y | Det vil returnere utgangen av bitvis OR av X og Y. | Den tar alle talltyper |
| X ^ Y | Det vil returnere utgangen av bitvis XOR av X og Y. | Den tar alle talltyper |
| ~X | Det vil returnere utgangen av bitvis IKKE av X. | Den tar alle talltyper |
De fire siste radene er bitvise snarere enn vanlig aritmetikk: de opererer pรฅ den binรฆre representasjonen av heltallsoperander, sรฅ &, | og ^ er ikke det samme som de logiske AND, OR og NOT som dekkes i neste avsnitt.
HiveQL Logisk Operatorer
Vi bruker logiske operatorer for รฅ utfรธre logiske operasjoner pรฅ operander.
- Logiske operasjoner som AND, OR og NOT mellom operander bruker disse operatorene.
- Operandtypene er alle av typen BOOLESK i disse operatorene.
Tabellen nedenfor gir detaljer om logiske operatorer i HiveQL:
| Operatorer | Tekniske beskrivelser | OperanDS |
|---|---|---|
| X OG Y | TRUE hvis bรฅde X og Y er SANN, ellers FALSE. | Bare boolske typer |
| X && Y | Samme som X OG Y, men her bruker vi &&-symbolet. | Bare boolske typer |
| X ELLER Y | TRUE hvis enten X eller Y eller begge er SANN, ellers FALSE. | Bare boolske typer |
| X || Y | Samme som X ELLER Y, men her bruker vi ||-symbolet. | Bare boolske typer |
| IKKE X | TRUE hvis X er FALSE, ellers FALSE. | Bare boolske typer |
| !X | Samme som IKKE X, men her bruker vi !-symbolet. | Bare boolske typer |
Fordi relasjonelle operatorer returnerer BOOLESK verdi, er det logiske operatorer som kombinerer dem: et predikat som lรธnn > 50 000 OG avd. = 'Salg' kjeder รฉn familie inn i den andre.
Operators pรฅ komplekse typer
Relasjonelle, aritmetiske og logiske operatorer fungerer alle pรฅ enkeltstรฅende skalarverdier. Hive lagrer ogsรฅ array-, map- og struct-kolonner, og disse trenger en annen mekanisme for รฅ nรฅ elementene inni dem. Tabellen nedenfor gir detaljer om komplekse typeoperatorer, som tilbyr denne mekanismen:
| Operatorer | OperanDS | Tekniske beskrivelser |
|---|---|---|
| A[n] | A er en matrise og n er en heltallstype | Den vil returnere det n-te elementet i matrisen A. Det fรธrste elementet har indeks 0. |
| M[nรธkkel] | M er et kart og nรธkkelen har type K | Den vil returnere verdien som tilhรธrer nรธkkelen i kartet. |
Begge formene er vanlige uttrykk, sรฅ de kan vises i en SELECT-liste, en WHERE-klausul eller en GROUP BY, og et struct-felt nรฅs med punktumnotasjon som S.field i stedet for en parentes.
Komplekse type konstruktรธrer
Der operatorene ovenfor leser en eksisterende kompleks kolonne, bygger konstruktรธrer en. Tabellen nedenfor gir detaljer om komplekse typekonstruktรธrer, som oppretter forekomster av de komplekse datatypene โ Array, Map og Struct โ i Hive.
I denne delen skal vi se pรฅ operasjonene som utfรธres pรฅ komplekse typekonstruktรธrer.
| Operatorer | OperanDS | Tekniske beskrivelser |
|---|---|---|
| matrise | (val1, val2, โฆ) | Den vil opprette en matrise med de gitte elementene som nevnt, som val1, val2. |
| opprett_forening | (tag, val1, val2, โฆ) | Den vil opprette en unionstype med verdien som refereres til av tag-parameteren. |
| kart | (nรธkkel1, verdi1, nรธkkel2, verdi2, โฆ) | Den vil opprette et kart med de gitte nรธkkel/verdi-parene som er nevnt i operandene. |
| navngitt_struktur | (navn1, val1, navn2, val2, โฆ) | Den vil opprette en struktur med de gitte feltnavnene og verdiene som er nevnt i operandene. |
| struktur | (val1, val2, val3, โฆ) | Oppretter en struktur med de gitte feltverdiene. Navnene pรฅ strukturfeltene vil vรฆre kolonne1, kolonne2 og sรฅ videre. |
Konstruktรธrer brukes oftest i en INSERT som fyller en kompleks kolonne, eller i en SELECT som pakker flere skalare kolonner inn i รฉn struktur fรธr resultatet skrives til en annen tabell.
HiveQL innebygde funksjoner
OperaTorer dekker sammenligning, beregning og elementtilgang, men de runder ikke et tall, trimmer en streng eller underordnertract to datoer. Det arbeidet tilhรธrer Hives innebygde funksjoner, som kalles ved navn i de samme uttrykkene som operatorene vises i. Tabellen nedenfor grupperer familiene en nybegynner mรธter fรธrst.
| Funksjonsfamilie | Typiske medlemmer | Hva det brukes til |
|---|---|---|
| matematisk | rund(), gulv(), tak(), abs(), pow(), sqrt(), rand() | Avrunding, potenser og andre numeriske beregninger pรฅ en enkelt kolonneverdi. |
| String | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Rengjรธring, trimming og omformingping tekst fรธr den sammenlignes eller grupperes. |
| Dato | nรฅvรฆrende_dato, รฅr(), mรฅned(), datediff(), date_add(), unix_timestempel() | Extracร finne datodeler og mรฅle intervaller mellom to datoer. |
| Betinget | hvis(), CASE WHEN, samles(), nvl(), isnull() | Velge en verdi pรฅ radnivรฅ og erstatte NULL med en reserveverdi. |
| Samling | size(), map_keys(), map_values(), array_contains(), sort_array() | Inspeksjon av array-, map- og struct-kolonnene som nรฅs av operatorene av kompleks type. |
| Skriv konvertering | cast(), binรฆr() | Tvinge en kolonne til den typen en operator forventer. |
| Aggregat (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Skjuler mange rader til รฉn verdi, vanligvis ved siden av GROUP BY. |
Funksjonslisten avhenger av Hive-utgivelsen, sรฅ det er verdt รฅ lese den fra selve รธkten i stedet for fra en statisk side. To setninger gjรธr det:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
VIS FUNKSJONER viser alle registrerte navn, BESKRIV FUNKSJON skriver ut signaturen pรฅ รฉn linje, og EXTENDED-skjemaet legger til brukseksempler der implementeringsklassen oppgir dem. Nรฅr ingen innebygd funksjon passer, godtar Hive en brukerdefinert funksjon skrevet i Java.
HiveQL vs. SQL: Viktige forskjeller
HiveQL lรฅner SQL-syntaks bevisst, og operatortabellene ovenfor vil se kjente ut for alle som har skrevet SQL. Utfรธrelsesmodellen nedenfor er ikke den samme, og forskjellene dukker opp sรฅ snart en spรธrring gรฅr forbi en enkel SELECT.
| Atferd | HiveQL | Tradisjonell SQL (RDBMS) |
|---|---|---|
| Skjemahรฅndtering | Skjema ved lesing โ skjemaet brukes nรฅr filen spรธrres | Skjema ved skriving โ skjemaet hรฅndheves nรฅr raden settes inn |
| OPPDATERING og SLETTING pรฅ radnivรฅ | Stรธttes kun pรฅ ACID-tabeller; administrerte tabeller er ACID som standard fra Hive 3.0 | Stรธttes som standard pรฅ alle tabeller |
| Indekser | Indeksstรธtte ble fjernet i Hive 3.0 (HIVE-18448); ORC- eller Parquet-filnivรฅindekser og materialiserte visninger erstatter den. | B-treet og andre sekundรฆre indekser er en kjernefunksjon |
| Utfรธrelse og latens | Kompilerer til batchjobber pรฅ Tez, MapReduce eller Spark, sรฅ selv smรฅ forespรธrsler har oppstartskostnader | Interaktiv utfรธrelse, vanligvis i millisekunder |
| Designmรฅl | Gjennomstrรธmning over svรฆrt store filer pรฅ HDFS eller et objektlager | Lav latens lesing og skriving pรฅ en enkelt server eller klynge |
Den praktiske konsekvensen for uttrykksskriving er liten, men reell. Operators oppfรธrer seg som forventet, men et predikat som ville blitt besvart fra en indeks i en relasjonsdatabase blir besvart i Hive ved รฅ skanne filer, sรฅ filtrering pรฅ en partisjonskolonne er vanligvis verdt mye mer enn รฅ finjustere selve operatoren.
