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

Csatlakozzon a lekérdezésekhez

Step 2) Adatok betöltése és megjelenítése

Csatlakozzon a lekérdezésekhez

A fenti képernyőképbő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

Step 3) sample_joins1 tábla létrehozása és adatok betöltése, megjelenítése

Csatlakozzon a lekérdezésekhez

A fenti képernyőképből a következőket figyelhetjük meg

  1. A sample_joins1 tábla létrehozása Orderid, Date1, Id, Amount oszlopokkal
  2. Adatok betöltése a sample_joins1 fájlba a orders.txt fájlból
  3. 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.

Belső összekapcsolás

A fenti képernyőképből a következőket figyelhetjük meg

  1. 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).
  2. 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.

Bal külső csatlakozás

A fenti képernyőképből a következőket figyelhetjük meg

  1. 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.
  2. 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.

Jobb külső csatlakozás

A fenti képernyőképből a következőket figyelhetjük meg

  1. 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).
  2. 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.

Teljes külső csatlakozás

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

  1. 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).
  2. 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