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
- Adatok betöltése a sample_joins fájlba a Customers.txt fájlból
- 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
- A sample_joins1 tábla létrehozása a Orderid, Date1, Id, Amount oszlopokkal
- Adatok betöltése a sample_joins1 fájlba a megrendelések.txt fájlból
- 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
- 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.
- 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
- 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.
- 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
- 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.
- 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:
- 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.
- 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 clauseSELECTFrom (SubQuery) Subquery in WHERE clauseSELECT From WHERE 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