Hive Csatlakozás & SubQuery bemutató példákkal

Tartalomjegyzék:

Anonim

Ebben az oktatóanyagban megtanulja-

  • Csatlakozzon lekérdezésekhez
  • Különböző típusú csatlakozások
  • Részlekérdezések
  • Egyéni szkriptek beágyazása
  • UDF-ek (felhasználói definiáló funkciók)

Csatlakozás lekérdezésekhez:

A csatlakozási lekérdezések a Hive két jelen lévő asztalán végezhetők el. A Join Concepts világos megértése érdekében itt két táblázatot hozunk létre,

  • Sample_joins (az ügyfelek részleteivel kapcsolatos)
  • Sample_joins1 (Az alkalmazottak által végrehajtott megrendelések részleteihez kapcsolódik)

1. lépés: A "sample_joins" táblázat létrehozása az oszlopnevekkel, az alkalmazottak neve, neve, kora, címe és fizetése

2. lépés: Adatok betöltése és megjelenítése

A fenti képernyőről

  1. Adatok betöltése a sample_joins fájlba a Customers.txt fájlból
  2. A sample_joins táblázat tartalmának megjelenítése

3. lépés: A sample_joins1 tábla létrehozása és betöltése, adatok megjelenítése

A fenti képernyőkép alapján a következőket figyelhetjük meg

  1. A sample_joins1 tábla létrehozása a Orderid, Date1, Id, Amount oszlopokkal
  2. Adatok betöltése a sample_joins1 fájlba a megrendelések.txt fájlból
  3. A sample_joins1-ben található rekordok megjelenítése

Előre haladva különböző típusú csatlakozásokat fogunk látni, amelyeket végre lehet hajtani az általunk létrehozott táblákon, de előtte figyelembe kell vennie a következő pontokat a csatlakozásokhoz.

Néhány megfigyelendő pont a Joins-ban:

  • Csak az Equality csatlakozások engedélyezettek a Joins-ban
  • Kétnél több tábla is összekapcsolható ugyanabban a lekérdezésben
  • LEFT, RIGHT, FULL OUTER csatlakozások léteznek annak érdekében, hogy jobban ellenőrizhessük az ON záradékot, amelyhez nincs egyezés
  • A csatlakozások nem kommutatívak
  • A csatlakozások bal asszociatívak, függetlenül attól, hogy bal vagy jobb oldali csatlakozások

Különböző típusú csatlakozások

A csatlakozások 4 típusúak, ezek vannak

  • Belső összekapcsolás
  • Bal külső csatlakozás
  • Jobb külső csatlakozás
  • Teljes külső csatlakozás

Belső összekapcsolás:

A belső táblák közös rekordjait ez a belső csatlakozás fogja letölteni.

A fenti képernyőkép alapján a következőket figyelhetjük meg

  1. Itt a JOIN kulcsszó használatával hajtunk végre csatlakozási lekérdezést a sample_joins és a sample_joins1 táblák között, a (c.Id = o.Id) feltételekkel.
  2. A közös rekordokat megjelenítő kimenet mindkét táblázatban megtalálható a lekérdezésben említett feltétel ellenőrzésével

Lekérdezés:

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

Bal külső csatlakozás:

  • Hive lekérdezési nyelv A LEFT OUTER JOIN visszaadja az összes sort a bal oldali táblázatból, annak ellenére, hogy a jobb oldali táblázatban nincsenek egyezések
  • Ha az ON záradék nulla rekordot mutat a jobb táblázatban, akkor a csatlakozások továbbra is rekordot adnak az eredményben, a NULL értékkel a jobb oldali táblázat minden oszlopában

A fenti képernyőkép alapján a következőket figyelhetjük meg

  1. Itt a "LEFT OUTER JOIN" kulcsszó segítségével hajtunk végre csatlakozási lekérdezést a sample_joins és a sample_joins1 táblák között, a (c.Id = o.Id) feltételekkel.

    Például itt a munkavállalói azonosítót használjuk referenciaként, és ellenőrzi, hogy az azonos-e az asztal jobb és bal oldalán, vagy sem. Egyező feltételként működik.

  2. A közös rekordokat megjelenítő kimenet mindkét táblázatban megtalálható a lekérdezésben említett feltétel ellenőrzésével.

    A fenti kimenet NULL értékei olyan oszlopok, amelyek nem tartalmaznak értékeket a Jobb táblából, amely a sample_joins1

Lekérdezés:

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

Jobb külső csatlakozás:

  • A Hive lekérdezés nyelve A JOBB KINCS
  • Ha az ON záradék nulla rekordot mutat a bal oldali táblázatban, akkor a csatlakozások továbbra is rekordot adnak vissza az eredményben, a NULL értékkel a bal oldali táblázat minden oszlopában
  • A RIGHT csatlakozás mindig a Jobb tábla és a bal oldali táblázat egyező rekordjait adja vissza. Ha a bal oldali táblázatnak nincsenek az oszlopnak megfelelő értékei, akkor a NULL értékeket adja vissza ezen a helyen.

A fenti képernyőkép alapján a következőket figyelhetjük meg

  1. Itt a "RIGHT OUTER JOIN" kulcsszó segítségével hajtunk végre csatlakozási lekérdezést a sample_joins és a sample_joins1 táblák között, a (c.Id = o.Id) feltételekkel.
  2. A közös rekordokat megjelenítő kimenet mindkét táblázatban megtalálható a lekérdezésben említett feltétel ellenőrzésével

Lekérdezés :

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

Teljes külső csatlakozás:

A lekérdezésben megadott JOIN feltétel alapján egyesíti a sample_joins és a sample_joins1 táblák rekordjait.

Visszaadja az összes rekordot a táblákból, és kitölti a NULL értékeket az oszlopokból, amelyeknek mindkét oldalon hiányzó értékei vannak.

A fenti képernyőképen a következőket figyelhetjük meg:

  1. Itt a "FULL OUTER JOIN" kulcsszó segítségével hajtunk végre csatlakozási lekérdezést a sample_joins és a sample_joins1 táblák között, a (c.Id = o.Id) feltételekkel.
  2. A kimenet, amely a táblázatban található összes rekordot megjeleníti a lekérdezésben említett feltétel ellenőrzésével. A kimenet nullértékei itt jelzik a hiányzó értékeket mindkét táblázat oszlopaiból.

Lekérdezés

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

Részlekérdezések:

A lekérdezésen belül található lekérdezés alkérdezésként ismert. A fő lekérdezés az al lekérdezések által visszaadott értékektől függ.

Az alkérdezéseket két típusba sorolhatjuk

  • Alkérdezések a FROM záradékban
  • Alkérdezések a WHERE záradékban

Mikor kell használni:

  • Egy adott érték kombinálása két oszlopértékből, különböző táblákból
  • Egy tábla értékének függősége a többi táblától
  • Egy oszlop értékeinek összehasonlító ellenőrzése más táblákból

Szintaxis:

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

Példa:

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

Itt a t1 és a t2 a táblák neve. A színes Subquery a t1 táblán. Itt a és b oszlopok, amelyeket hozzáadunk egy allekérdezéshez, és hozzárendeljük a col1-hez. A Col1 a Fő táblázat oszlopértéke. Ez az allekérdezésben található "col1" oszlop megegyezik a col1 oszlop fő táblájának lekérdezésével.

Egyéni szkriptek beágyazása:

A Hive biztosítja a felhasználóspecifikus szkriptek írását az ügyfél igényeinek megfelelően. A felhasználók meg tudják írni a saját térképüket, és csökkenthetik a szkriptek követelményeit. Ezeket beágyazott egyéni szkripteknek hívjuk. A kódolási logikát az egyedi szkriptek definiálják, és ezt a szkriptet használhatjuk az ETL időben.

Mikor válassza a Beágyazott szkripteket:

  • Az ügyfélspecifikus követelmények szerint a fejlesztőknek szkripteket kell írniuk és telepíteniük a Hive-be
  • Ahol a Hive beépített funkciói nem fognak működni meghatározott tartományi követelmények esetén

Ehhez a Hive-ban a TRANSFORM záradékot használja mind a térkép, mind a reduktor szkriptek beágyazásához.

Ebben a beágyazott egyéni szkriptben a következő pontokat kell figyelembe vennünk

  • Az oszlopokat karakterláncokká alakítja és a TAB határolja, mielőtt átadná azokat a felhasználói szkriptnek
  • A felhasználói szkript normál kimenetét TAB-elválasztott karakterlánc oszlopként kezeljük

Beágyazott szkript minta,

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;

A fenti szkriptből a következőket figyelhetjük meg

Ez csak a megértés mintapéldája

  • A pv_users a felhasználói tábla, amelynek olyan mezői vannak, mint a userid és a date, amint azt a map_script említi
  • Reduktor szkript, amely a pv_users táblák dátumán és számán van meghatározva