Ugrás a fő tartalomra

Adattárház töltés alapok : DW töltés

Adattárház töltés alapok : DW töltés


1️⃣ Stage táblák betöltése az adattárház egységes integrációs rétegébe

Az egységes integrációs réteg az adattárház központi összekötő rétege, amely biztosítja az adatforrások közötti integrációt, az adatok tisztítását, és az üzleti logika alkalmazását. A cél az adatok egységes formátumba való transzformálása, hogy azok készen álljanak az adattárház különböző analitikai és riporting funkcióira.

📌 1.1 Stage → Integrációs réteg folyamata

A stage táblákban előkészített nyers adatokat integrálni kell és előkészíteni a végső adattárház táblák számára. Ez magában foglalja:

  • Adattisztítás: A nyers adatok hibáinak korrigálása, hiányzó értékek kezelése, duplikációk eltávolítása.

  • Transformáció: Az üzleti szabályoknak megfelelő transzformációk végrehajtása (pl. dátumformátumok, kulcsok kezelése, mértékegységek átváltása).

  • Adategyesítés: Az adatok összevonása különböző forrásokból, hogy biztosítsuk az adatkonzisztenciát.

Példa az adatok integrálására a stage táblából egy cél adattárház tábla felé:

--- sql

-- Stage tábla SELECT * FROM stage_sales; -- Integrációs tábla (cél) INSERT INTO target_sales_fact (order_id, product_id, total_sales, sales_date) SELECT s.order_id, p.product_id, s.total_sales * p.exchange_rate AS adjusted_sales, TO_DATE(s.sales_date, 'YYYY-MM-DD') AS sales_date FROM stage_sales s JOIN product_info p ON s.product_code = p.product_code;

📌 1.2 Transformációs szabályok és üzleti logika

A transzformációs szabályok és az üzleti logika közvetlenül befolyásolják az adatok minőségét és integritását. Az integrációs rétegben jellemzően a következő műveletek történnek:

  • Számítások: Aggregálás, például értékek összeadása, átlagolás, maximum, minimum keresés.

  • Átalakítások: Különböző adatstruktúrák átalakítása, például sorok oszlopokká alakítása (pivotálás).

  • Dátum- és időformátumok kezelése: A különböző forrásokból származó dátumok standardizálása.

Példa az üzleti szabályok alkalmazására (szűrés és számítás):

--- sql

INSERT INTO target_sales_fact (order_id, total_sales, sales_date) SELECT order_id, CASE WHEN total_sales < 0 THEN 0 ELSE total_sales END AS total_sales, TO_DATE(sales_date, 'YYYY-MM-DD') FROM stage_sales WHERE sales_date >= '2024-01-01'; -- Csak a 2024-es adatok

📌 1.3 Adattisztítás és adategyesítés

Az adattisztítási és adategyesítési lépések célja az adatminőség biztosítása. Az alábbi feladatok végezhetők el:

  • Duplikációk eltávolítása: A forrásadatokban előforduló duplikációk kezelése.

  • Hiányzó adatok pótolása: Az üzleti szabályoknak megfelelően a hiányzó adatokat ki kell egészíteni (pl. átlagos értékekkel, nullákkal vagy más helyettesítő értékkel).

  • Adatok összevonása: Az integráció során különböző forrásokból származó adatokat egyesíteni kell.

Példa a duplikációk eltávolítására és a hiányzó értékek kezelésére:

---sql

-- Duplikációk eltávolítása WITH cte AS ( SELECT order_id, product_id, ROW_NUMBER() OVER (PARTITION BY order_id, product_id ORDER BY created_at DESC) AS row_num FROM stage_sales ) DELETE FROM cte WHERE row_num > 1; -- Hiányzó értékek kezelése UPDATE stage_sales SET total_sales = 0 WHERE total_sales IS NULL;

2️⃣ Adattárház töltés függőségeinek kezelése

Az adattárház töltésének megfelelő kezelése kritikus fontosságú a pontos és naprakész adatok biztosításához. A függőségek kezelésére különböző stratégiák és technikák állnak rendelkezésre, amelyek segítenek biztosítani, hogy a betöltési folyamatok megfelelő sorrendben, megbízhatóan történjenek.

📌 2.1 Folyamatfüggőségek modellezése

Az adattárház betöltési folyamatában gyakran több táblát is frissíteni kell, és bizonyos táblák betöltése előtt más táblák betöltése szükséges. A függőségek modellezése és kezelése elengedhetetlen a megfelelő betöltési sorrend biztosításához.

Példa egy adatbetöltési függőség kezelésére:

--- sql

-- Először a referenciatáblák betöltése INSERT INTO product_info SELECT * FROM stage_product_info; -- Utána az adattárház faktáblájának betöltése INSERT INTO sales_fact SELECT p.product_id, s.sales_amount FROM stage_sales s JOIN product_info p ON s.product_code = p.product_code;

📌 2.2 Ellenőrzési pontok és újraindítási stratégiák

A betöltési folyamat során fontos, hogy legyenek ellenőrzési pontok, amelyek biztosítják, hogy ha valami hiba történik, akkor a folyamat visszaállítható egy biztonságos állapotra. Az újraindítási stratégiák segítenek a betöltési folyamat folytatásában anélkül, hogy ismételten végig kellene futtatni az összes műveletet.

Példa újraindítási pontokra és hibaellenőrzésre:

---sql

-- Ellenőrzés után csak akkor folytatjuk a következő lépéssel BEGIN -- Ellenőrzés IF (SELECT COUNT(*) FROM stage_sales WHERE processed = 'N') > 0 THEN -- Hibakezelés RAISE_APPLICATION_ERROR(-20001, 'Nincsenek új adatok a betöltéshez'); ELSE -- Tovább lépés a következő tábla betöltésére INSERT INTO target_sales_fact SELECT * FROM stage_sales WHERE processed = 'Y'; END IF; END;

📌 2.3 Parallel és szekvenciális feldolgozás

A nagyobb teljesítmény elérése érdekében párhuzamos betöltést is alkalmazhatunk, ha a betöltési lépések között nincs szoros függőség. Ha a műveletek között szorosabb kapcsolat van, akkor szekvenciális feldolgozást kell alkalmazni, hogy elkerüljük az adatok inkonzisztenciáját.

Példa párhuzamos betöltésre:

---sql

-- Parallel betöltés INSERT /*+ PARALLEL(stage_sales 4) */ INTO target_sales_fact SELECT * FROM stage_sales;

📌 2.4 Függőségkezelés implementációja (PL/SQL, Python, ETL eszközök)

Függőségek kezelésére használhatunk PL/SQL blokkot, Python scriptet vagy dedikált ETL eszközt (pl. Informatica, Talend).

Példa PL/SQL-ben a függőség kezelésére:

--- sql

DECLARE v_count NUMBER; BEGIN -- Ellenőrizzük a függőséget SELECT COUNT(*) INTO v_count FROM stage_product_info WHERE status = 'N'; IF v_count > 0 THEN -- Függőség: Ne indítsuk el a következő betöltést DBMS_OUTPUT.PUT_LINE('Függőség nem teljesült, várakozás...'); ELSE -- Folytatjuk a betöltést INSERT INTO target_sales_fact SELECT * FROM stage_sales; END IF; END;

Megjegyzések