Hive Join & SubQuery Tutorial med eksempler

Innholdsfortegnelse:

Anonim

I denne veiledningen vil du lære-

  • Bli med på spørsmål
  • Ulike typer sammenføyninger
  • Subspørsmål
  • Legge til egendefinerte skript
  • UDFer (brukerdefinerte funksjoner)

Bli med på spørsmål:

Delta-spørsmål kan utføres på to tabeller i Hive. For å forstå Join Concepts klart her lager vi to tabeller overalt,

  • Sample_joins (relatert til detaljer om kunder)
  • Sample_joins1 (Relatert til bestillingsdetaljer gjort av ansatte)

Trinn 1) Opprettelse av tabellen "sample_joins" med kolonnenavn ID, navn, alder, adresse og lønn til de ansatte

Trinn 2) Laste inn og vise data

Fra skjermbildet ovenfor

  1. Laster inn data i sample_joins fra Customers.txt
  2. Viser sample_joins tabellinnhold

Trinn 3) Opprettelse av sample_joins1 tabell og lasting, viser data

Fra skjermbildet ovenfor kan vi observere følgende

  1. Oppretting av tabell sample_joins1 med kolonner Orderid, Date1, Id, Amount
  2. Laster data inn i sample_joins1 fra orders.txt
  3. Viser poster til stede i sample_joins1

Fremover vil vi se forskjellige typer sammenføyninger som kan utføres på tabeller vi har laget, men før det må du vurdere følgende punkter for sammenføyninger.

Noen punkter å observere i Joins:

  • Bare likestillingsforeninger er tillatt
  • Mer enn to tabeller kan settes sammen i samme spørring
  • VENSTRE, HØYRE, FULL YTRE sammenføyninger eksisterer for å gi mer kontroll over ON-klausul som det ikke samsvarer med
  • Sammenføyninger er ikke kommutative
  • Joins er venstreassosiative uansett om de er LEFT eller RIGHT joins

Ulike typer sammenføyninger

Forbindelser er av 4 typer, disse er

  • Indre sammenføyning
  • Venstre ytre skjøt
  • Høyre ytre sammenføyning
  • Full ytre sammenføyning

Indre sammenføyning:

Postene som er felles for begge tabellene, blir hentet av denne Inner Join.

Fra skjermbildet ovenfor kan vi observere følgende

  1. Her utfører vi join-spørring ved å bruke JOIN-nøkkelord mellom tabellene sample_joins og sample_joins1 med samsvarende tilstand som (c.Id = o.Id).
  2. Utdataene som viser vanlige poster i begge tabeller ved å sjekke tilstanden som er nevnt i spørringen

Spørsmål:

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

Venstre ytre sammenføyning:

  • Hive-spørringsspråk LEFT OUTER JOIN returnerer alle radene fra venstre tabell selv om det ikke er treff i høyre tabell
  • Hvis ON-klausul samsvarer med null poster i høyre tabell, returnerer sammenføyningene fortsatt en post i resultatet med NULL i hver kolonne fra høyre tabell.

Fra skjermbildet ovenfor kan vi observere følgende

  1. Her utfører vi sammenføyningsspørring ved å bruke "LEFT OUTER JOIN" nøkkelord mellom tabellene sample_joins og sample_joins1 med samsvarende tilstand som (c.Id = o.Id).

    For eksempel bruker vi medarbeider-id som referanse, det sjekker om id er vanlig både i høyre og venstre side av tabellen eller ikke. Det fungerer som matchende tilstand.

  2. Utdataene som viser vanlige poster i begge tabeller ved å sjekke tilstanden som er nevnt i spørringen.

    NULL-verdier i ovennevnte utdata er kolonner uten verdier fra høyre tabell som er sample_joins1

Spørsmål:

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Høyre ytre sammenføyning:

  • Hive spørrespråk RIGHT OUTER JOIN returnerer alle radene fra høyre tabell selv om det ikke er noen treff i venstre tabell
  • Hvis ON-klausul samsvarer med null poster i venstre tabell, returnerer sammenføyningene fortsatt en post i resultatet med NULL i hver kolonne fra venstre tabell
  • RIGHT sammenføyninger returnerer alltid poster fra en høyre tabell og samsvarende poster fra den venstre tabellen. Hvis den venstre tabellen ikke har noen verdier som tilsvarer kolonnen, vil den returnere NULL-verdiene på det stedet.

Fra skjermbildet ovenfor kan vi observere følgende

  1. Her utfører vi join-spørring ved å bruke "RIGHT OUTER JOIN" nøkkelord mellom tabellene sample_joins og sample_joins1 med samsvarende tilstand som (c.Id = o.Id).
  2. Utdataene som viser vanlige poster i begge tabeller ved å sjekke tilstanden som er nevnt i spørringen

Spørring :

 SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Full ytre sammenføyning:

Den kombinerer poster for både tabellene sample_joins og sample_joins1 basert på JOIN-tilstand gitt i spørringen.

Den returnerer alle postene fra begge tabeller og fyller ut NULL-verdier for kolonnene som mangler verdier som er matchet på hver side.

Fra skjermbildet ovenfor kan vi observere følgende:

  1. Her utfører vi join-spørring ved å bruke "FULL OUTER JOIN" nøkkelord mellom tabellene sample_joins og sample_joins1 med samsvarende tilstand som (c.Id = o.Id).
  2. Utgangen som viser alle postene i begge tabeller ved å sjekke tilstanden som er nevnt i spørringen. Nullverdier i utdata her angir de manglende verdiene fra kolonnene i begge tabellene.

Spørsmål

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Subspørsmål:

En spørring som er tilstede i en spørring er kjent som en underspørring. Hovedspørsmålet vil avhenge av verdiene som returneres av underspørringene.

Delsøk kan klassifiseres i to typer

  • Underforespørsler i FROM-ledd
  • Underforespørsler i WHERE-ledd

Når skal du bruke:

  • For å få en bestemt verdi kombinert fra to kolonneverdier fra forskjellige tabeller
  • Avhengighet av en tabell verdier på andre tabeller
  • Sammenligningskontroll av en kolonneverdier fra andre tabeller

Syntaks:

Subquery in FROM clauseSELECT From (SubQuery) Subquery in WHERE clauseSELECT  FromWHERE col1 IN (SubQuery);

Eksempel:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

Her er t1 og t2 tabellnavn. Den fargede er underforespørsel utført på tabell t1. Her er a og b kolonner som legges til i et underspørsmål og tilordnes col1. Kol1 er kolonneverdien i hovedtabellen. Denne kolonnen "col1" i underspørringen tilsvarer hovedtabelspørringen i kolonne col1.

Legge til egendefinerte skript:

Hive gir muligheten for å skrive brukerspesifikke skript for kundens krav. Brukerne kan skrive sitt eget kart og redusere skript etter kravene. Disse kalles innebygde egendefinerte skript. Kodelogikken er definert i de tilpassede skriptene, og vi kan bruke skriptet i ETL-tiden.

Når skal du velge innebygde skript:

  • I klientspesifikke krav må utviklere skrive og distribuere skript i Hive
  • Hvor Hive innebygde funksjoner ikke kommer til å fungere for spesifikke domenekrav

For dette i Hive bruker den TRANSFORM-setningen til å legge inn både kart- og reduksjonsskript.

I disse innebygde egendefinerte skriptene må vi følge følgende punkter

  • Kolonner blir transformert til streng og avgrenset av TAB før de blir gitt til brukerskriptet
  • Standardutdata fra brukerskriptet blir behandlet som TAB-atskilte strengkolonner

Eksempel på innebygd skript,

FROM (FROM pv_usersMAP pv_users.userid, pv_users.dateUSING 'map_script'AS dt, uidCLUSTER BY dt) map_outputINSERT OVERWRITE TABLE pv_users_reducedREDUCE map_output.dt, map_output.uidUSING 'reduce_script'AS date, count;

Fra ovenstående skript kan vi observere følgende

Dette er bare eksemplet manus for forståelse

  • pv_users er brukertabellen som har felt som bruker-ID og dato som nevnt i map_script
  • Reduksjonsskript definert på dato og antall pv_users-tabeller