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
Megjegyzés küldése