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.

  • ๐Ÿงฎ Fem operatรธrfamilier: Relasjons-, aritmetiske-, logiske-, komplekse- og konstruktรธroperatorer dekker alle uttrykk en HiveQL-spรธrring trenger.
  • ๐Ÿ” Sammenligning tar enhver primitiv: Relasjonsoperatorer godtar alle primitive typer, mens LIKE, RLIKE og REGEXP bare fungerer pรฅ strenger.
  • โž• Aritmetikk inkluderer bitvis arbeid: Utover de fire grunnleggende operasjonene eksponerer HiveQL modulo og bitvis AND, OR, XOR og NOT pรฅ talltyper.
  • ๐Ÿงฉ Nestede data har sin egen syntaks: A[n] nรฅr et arrayelement og M[key] nรฅr en kartverdi, begge kan brukes overalt hvor et uttrykk er tillatt.
  • ๐Ÿ—๏ธ Konstruktรธrer bygger komplekse verdier: array(), map(), struct(), named_struct() og create_union() setter sammen komplekse kolonner i en spรธrring.
  • ๐Ÿ“š Funksjoner utvider operatorene: Matematiske funksjoner, streng-, dato-, betingelses-, samlings- og aggregeringsfunksjoner hรฅndterer arbeid som ingen operator dekker.

Hva er Hive Query Language (HiveQL)-operatorer

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.

Spรธrsmรฅl og svar

Nรธkkelord, operatorord som AND eller LIKE, og funksjonsnavn lรธses uten รฅ skille mellom store og smรฅ bokstaver, sรฅ SELECT og SELECT oppfรธrer seg likt. Strengdata gjรธr ikke det: รฅ sammenligne 'Salg' med 'salg' returnerer FALSE med mindre upper() eller lower() brukes fรธrst.

X / Y returnerer alltid en DOUBLE, selv nรฅr begge operandene er heltall, sรฅ 7 / 2 gir 3.5 i stedet for 3. Bruk DIV-nรธkkelordet for heltallsdivisjon og %-operatoren for resten.

Aritmetiske og sammenligningsoperatorer forplanter NULL: ethvert uttrykk som involverer NULL evalueres til NULL, ikke FALSE. Test med IS NULL eller IS NOT NULL, og erstatt en reserve med coalesce() eller nvl() fรธr verdien nรฅr en operator.

LIKE bruker SQL-jokertegn, der % samsvarer med en hvilken som helst rekkefรธlge av tegn og _ samsvarer med รฉn. RLIKE samsvarer med en Java regulรฆrt uttrykk mot en hvilken som helst delstreng av verdien. REGEXP er et synonym for RLIKE og oppfรธrer seg identisk.

Aritmetiske operatorer binder fรธrst, deretter sammenligningsoperatorer, deretter IKKE, deretter AND, og โ€‹โ€‹deretter OR. Fordi rekkefรธlgen er lett รฅ misforstรฅ i lange predikater, anbefales parenteser nรฅr AND og OR vises i samme leddsetning.

Ja. Relasjonelle og logiske operatorer danner sammenfรธyningsbetingelser, aritmetiske operatorer kan produsere grupper.ping nรธkler, og kompleks tilgang som M[nรธkkel] er gyldig overalt hvor et uttrykk er tillatt, inkludert SELECT-lister, WHERE-klausuler og ORDER BY.

Maskinlรฆringsassistenter oversetter et filter for enkeltsprรฅk til et kandidatpredikat og flagger avvik i type, for eksempel รฅ sammenligne en strengkolonne med et tall. Bekreft alltid den genererte operatoren mot tabellene ovenfor, fordi dialekter varierer mellom Hive, Spark SQL og Presto.

Den hรฅndterer vanlige predikater godt og foreslรฅr coalesce()- eller CASE WHEN-mรธnstre fra en kort kommentar. Den blander ogsรฅ inn syntaks fra andre motorer, sรฅ bekreft bitvise operatorer, kompleks typetilgang og ethvert funksjonsnavn med DESCRIBE FUNCTION fรธr du kjรธrer spรธrringen.

Oppsummer dette innlegget med: