Hive Join & SubQuery oktatóanyag példákkal
Csatlakozás a lekérdezésekhez
Az összekapcsolási lekérdezések két, a Hive-ban található táblán is végrehajthatók. A megértéshez Csatlakozz Concepts egyértelmű, hogy itt két táblázatot hozunk létre,
- Sample_joins (az ügyfelek adataival kapcsolatos)
- Sample_joins1 (az alkalmazottak által végzett megrendelés részleteivel kapcsolatos)
Step 1) „Sample_joins” tábla létrehozása oszlopnevekkel az alkalmazottak azonosítója, neve, életkora, címe és fizetése
Step 2) Adatok betöltése és megjelenítése
A fenti képernyőképbő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
Step 3) sample_joins1 tábla létrehozása és adatok betöltése, megjelenítése
A fenti képernyőképből a következőket figyelhetjük meg
- A sample_joins1 tábla létrehozása Orderid, Date1, Id, Amount oszlopokkal
- Adatok betöltése a sample_joins1 fájlba a orders.txt fájlból
- A sample_joins1-ben található rekordok megjelenítése
A továbbiakban különböző típusú összekapcsolásokat fogunk látni, amelyeket az általunk létrehozott táblákon végre lehet hajtani, de előtte meg kell fontolnia a következő pontokat az összekapcsoláshoz.
Néhány pont, amelyet figyelembe kell venni a csatlakozásoknál:
- Csak az egyenlőségi csatlakozások engedélyezettek az összekapcsolásban
- Kettőné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őrizzék az ON záradékot, amelyhez nincs egyezés
- A csatlakozások nem kommutatívak
- Az összeillesztések balra asszociatívak, függetlenül attól, hogy BAL vagy JOBB csatlakozások
Különböző típusú csatlakozások
A csatlakozások 4 típusúak, ezek
- Belső összekapcsolás
- Bal külső csatlakozás
- Jobb külső csatlakozás
- Teljes külső csatlakozás
Belső összekapcsolás:
A mindkét tábla közös rekordjait ez a belső csatlakozás fogja lekérni.
A fenti képernyőképből a következőket figyelhetjük meg
- Itt a minta_joins és minta_joins1 táblák között a JOIN kulcsszó használatával csatlakozási lekérdezést hajtunk végre, a következő feltétellel: (c.Id= o.Id).
- A közös rekordokat megjelenítő kimenet mindkét táblában megtalálható a lekérdezésben említett feltétel ellenőrzésével
Keresé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 a bal oldali táblázat összes sorát visszaadja annak ellenére, hogy a jobb oldali táblázatban nincs találat
- Ha az ON záradék nulla rekorddal egyezik meg a jobb oldali táblában, az összekapcsolások továbbra is egy rekordot adnak vissza az eredményben, ahol a jobb oldali tábla minden oszlopában NULL szerepel.
A fenti képernyőképből a következőket figyelhetjük meg
- Itt a „LEFT OUTER JOIN” kulcsszó használatával csatlakozási lekérdezést hajtunk végre a sample_joins és sample_joins1 táblák között, a következő feltétellel: (c.Id= o.Id).Például itt az alkalmazotti azonosítót használjuk referenciaként, ez ellenőrzi, hogy az id közös-e a jobb és bal oldali táblázatban vagy sem. Megfelelő feltételként működik.
- A mindkét táblában megtalálható közös rekordokat megjelenítő kimenet a query.NULL-ban említett feltétel ellenőrzésével.
Keresé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ési nyelve A RIGHT OUTER JOIN a jobb oldali tábla összes sorát visszaadja annak ellenére, hogy a bal oldali táblában nincs találat
- Ha az ON záradék nulla rekordnak felel meg a bal oldali táblában, az összekapcsolások továbbra is egy rekordot adnak vissza a bal oldali tábla minden oszlopában NULL-lal.
- A RIGHT csatlakozások mindig a jobb oldali táblából adják vissza a rekordokat, a bal oldali táblából pedig a megfelelő rekordokat. Ha a bal oldali táblázatban nincsenek az oszlopnak megfelelő értékek, akkor az adott helyen NULL értékeket ad vissza.
A fenti képernyőképből a következőket figyelhetjük meg
- Itt a „RIGHT OUTER JOIN” kulcsszó használatával csatlakozási lekérdezést hajtunk végre a sample_joins és sample_joins1 táblák között, a következő feltétellel: (c.Id= o.Id).
- A közös rekordokat megjelenítő kimenet mindkét táblában megtalálható a lekérdezésben említett feltétel ellenőrzésével
Kérdé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 kombinálja a minta_csatlakozások és a minta_csatlakozások1 táblák rekordjait.
Mindkét táblából visszaadja az összes rekordot, és NULL értékeket ír ki azokhoz az oszlopokhoz, amelyeken mindkét oldalon hiányoznak az értékek.
A fenti képernyőképből a következőket figyelhetjük meg:
- Itt a „FULL OUTER JOIN” kulcsszó használatával csatlakozási lekérdezést hajtunk végre a sample_joins és sample_joins1 táblák között, a következő feltétellel: (c.Id= o.Id).
- A kimenet, amely megjeleníti a táblában található összes rekordot a lekérdezésben említett feltétel ellenőrzésével. A kimenetben szereplő nullértékek mindkét tábla oszlopából hiányzó értékeket jelölik.
Kérdé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)
Al-lekérdezések
A lekérdezésben található lekérdezést allekérdezésnek nevezzük. A fő lekérdezés az allekérdezések által visszaadott értékektől függ.
Az allekérdezések két típusba sorolhatók
- Allekérdezések a FROM záradékban
- Allekérdezések a WHERE záradékban
Mikor kell használni:
- Egy adott érték összevonása két különböző táblázatból származó oszlopértékből
- Egy tábla értékeinek függése más tábláktól
- Egy oszlop értékeinek összehasonlító ellenőrzése más táblázatokból
Syntax:
Subquery in FROM clause SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main > Subquery in WHERE clause SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);
Példa:
SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2
Itt t1 és t2 táblanevek. A színes a t1 táblán végrehajtott segédlekérdezés. Itt a és b olyan oszlopok, amelyek egy segédlekérdezésbe kerülnek, és az 1. oszlophoz vannak hozzárendelve. A Col1 a főtáblázatban található oszlopérték. Az allekérdezésben található „col1” oszlop megegyezik a col1 oszlopban található főtábla-lekérdezéssel.
Egyéni szkriptek beágyazása
Kaptár lehetővé teszi felhasználóspecifikus szkriptek írását az ügyfél igényeinek megfelelően. A felhasználók saját térképet írhatnak, és a szkripteket a követelményeknek megfelelően csökkenthetik. Ezeket Embedded Custom szkripteknek nevezzük. A kódolási logika az egyéni szkriptekben van definiálva, és ezt a szkriptet használhatjuk az ETL időben.
Mikor válasszuk a beágyazott szkripteket:
- Az ügyfélspecifikus követelményeknek megfelelően a fejlesztőknek szkripteket kell írniuk és telepíteniük kell a Hive-ban
- Ahol a Hive beépített funkciói nem fognak működni bizonyos tartománykövetelmények esetén
Ehhez a Hive-ben a TRANSFORM záradékot használja a beágyazott leképezési és redukciós szkriptekhez.
Ebben az Embedded egyéni szkriptekben a következő pontokat kell figyelembe vennünk
- Az oszlopok karakterláncokká lesznek átalakítva, és TAB-mal elválasztva, mielőtt a felhasználói szkriptnek adnák
- A felhasználói parancsfájl szabványos kimenete TAB-okkal elválasztott karakterlánc-oszlopként lesz kezelve
Minta beágyazott szkript,
FROM ( FROM pv_users MAP pv_users.userid, pv_users.date USING 'map_script' AS dt, uid CLUSTER BY dt) map_output INSERT OVERWRITE TABLE pv_users_reduced REDUCE map_output.dt, map_output.uid USING 'reduce_script' AS date, count;
A fenti szkriptből a következőket figyelhetjük meg
Ez csak a minta szkript a megértéshez
- A pv_users a felhasználók tábla, amely olyan mezőkkel rendelkezik, mint a userid és a dátum, ahogyan a map_scriptben szerepel
- A pv_users táblák dátuma és száma alapján definiált redukáló szkript