Informatika | Adatbázisok » Oracle Warehouse Builder, OWB Mapping bevezető

 2011 · 20 oldal  (547 KB)    magyar    45    2013. május 07.  
    
Értékelések

Nincs még értékelés. Legyél Te az első!

Tartalmi kivonat

Oracle Warehouse Builder OWB Mapping bevezető Tartalomjegyzék Bevezetés . 2 Új OWB Projekt létrehozása . 3 Új Oracle Modul - Forrás modul létrehozása . 4 Új Oracle Modul – Cél (target) modul létrehozása . 12 Új Mapping (transzformáció) létrehozása . 15 1 / 20 Bevezetés Ebben a fejezetben Oracle adatbázisban már létező forrástáblákból importálunk adatokat új Oracle adatbázis táblába OWB map használatával. A példában az Oracle adatbázis egyik minta sémájának (HR) a tábláiból importálunk adatokat az adott cél séma táblájába. • • • Forrás modul létrehozása (Source) Cél modul definiálása (Target) Importáló OWB map létrehozása • Map által generált kód megtekintése, telepítés (deploy) és végrehajtás 2 / 20 Új OWB Projekt létrehozása Indítsuk el az OWB Design Center programot: Start -> Oracle OWB Client -> Warehouse Builder -> Design Center A bejelentkezés után a munka megkezdéséhez

először létre kell hoznunk egy új OWB projektet: File -> New -> Project (Create new project) (3-1. ábra) A projekt neve legyen: OWB PROJEKT1 3 / 20 Új Oracle Modul - Forrás modul létrehozása A példában a már létező HR minta Oracle adatbázis sémában lévő táblák közül rendelünk néhányat hozzá az új forrás modulunkhoz, amelyből importálni fogunk. Ehhez létrehozunk egy új forrás modult. A létrehozott forrás modul meta-adatait majd az OWB map programban forrásként felhasználjuk. Nyissuk le az "OWB PROJEKT1" projekt "Databases" ágát. Kattintsunk jobb gombbal az "Oracle"-re, majd válasszuk a "New Oracle Module" menüpontot. (3-2. ábra) Megjelenik a varázsló. Az üdvözlő képernyőn kattintsunk a "Következő" gombra A modul névnek adjuk meg például a "HR" nevet. Ez lesz a neve az Oracle forrás modulunknak Kattintsunk a "Következő" gombra. 4 / 20 (3-3.

ábra) Meg kell adnunk egy Lokáció (kapcsolat leíró) nevet is (az OWB minden forrásmodulhoz létrehoz egyet), jelen esetben "HR LOCATION1" alapértelmezett névvel. (3-4. ábra) 5 / 20 Kattintsunk az "Edit" gombra a Lokáció beállításához. Nevezzük át "HR LOCATION1" nevet "HR LOCATION" névre, majd adjuk meg a csatlakozási információit (felhasználónév, jelszó, adatbázis szerver, port, és szolgáltatás név) annak az Oracle adatbázisnak, amelyben a felhasználni kívánt forrástábláink vannak. A példában a helyi gépen található, 1521-es porton, és „orcl” szolgáltatás néven elérhető adatbázis példány HR sémájához szeretnénk csatlakozni. A 3-4. ábrán látható a "Connection Type" legördülő menü Itt azt lehet beállítani, hogyan szeretnénk csatlakozni a meglévő adatbázishoz: • HOST:PORT:SERVICENAME • Adatbázis link • OCI • SQL*NET kapcsolat Ez teszi lehetővé a

csatlakozást, például egy RAC környezethez, ahol TNS név bejegyzéseket kell használni, nem pedig egy különálló adatbázisra egy direkt hivatkozást. A szükséges csatlakozási információk megadása után tesztelhetjük a kapcsolatot. ("Test Connection" gomb). Ha a "Successful" üzenet jelenik meg, a kapcsolati leíró paraméterek helyesen lettek kitöltve, és a csatlakozás sikeres. Kattintsunk az "OK" gombra (3-5. ábra) 6 / 20 Visszatérünk az előző képernyőhöz, ahol kattintsunk a "Következő" gombra, majd az ellenőrző képernyőn a "Befejezés" gombra. Az Oracle forrás modulunk "HR" névvel létrejött: (3-6. ábra) Használjuk az "Import Metadata" varázslót, hogy az Oracle forrásmodulba be tudjuk tölteni a szükséges meta-információkat a beimportálandó adatbázis táblákból. Válasszuk a „Database Objects” menüpontot. 7 / 20 (3-7. ábra) Szokás szerint egy

üdvözlő képernyő jelenik meg. Kattintsunk a "Következő" gombra A megjelenő oldalon lehet kiválasztani, hogy milyen típusú objektumot szeretnénk importálni a HR Oracle forrásmodulba. Válasszuk ki a "Table" típust, és kattintsunk a "Következő" gombra (3-8. ábra) 8 / 20 A baloldalon a HR sémában található adatbázis táblákat láthatjuk. Húzzuk át a „Employees” táblát (az ábrán Countries) a jobb oldalra. Ekkor jelenik meg a 3-9 ábra bal alsó sarkában található figyelmeztető ablak, ami azt jelzi, hogy az „Employees” tábla és a „Departments” (az ábrán REGIONS) tábla között függőségi kapcsolat van. Az OWB minden definíciót importál, beleértve a megszorításokat is. Itt is felismeri, hogy a táblák között idegen kulcs kapcsolat van Kattintsunk az "OK" gombra, ekkor a függőségben lévő összes tábla megjelenik a jobb oldalon, és importálásra kerül. (3-9. ábra) A

megjelenő "Summary and Import" ablakban ellenőrizhetjük, hogy kiválasztottunk-e minden objektumot, amit importálni szeretnénk, illetve szerkeszthetjük a hozzájuk tartozó "description" mezőket. 9 / 20 (3-10. ábra) Kattintsunk az "Advanced Import Options"-ra. Itt további finomabb beállítások érhetőek el, mint például, hogy importáljuk-e a táblákhoz tartozó indexeket, partíciókat, stb. Itt lehet megadni azt is, hogy ha az importálandó tábla már előzőleg be volt töltve, akkor milyen módon szinkronizálja az oszlop definíciókat. Ha a "Preserve workspace added columns" be van pipálva, akkor a tábla úgy lesz szinkronizálva, hogy a régi definícióban megtalálható, de az újban már nem meglévő oszlopok nem törlődnek az OWB tervadattárból (repository). (3-11. ábra) 10 / 20 Jelen esetben a táblákat először töltjük be, így maradhatnak az alapértelmezés szerinti beállítások. Kattintsunk

az "OK" gombra, majd a "Befejezés" gombra. Az "Import Results" képernyőn ellenőrizhetjük a betöltött táblákat, és a hozzájuk tartozó oszlopokat. Jelen esetben az "Actions" oszlop csak "Created" értéket tartalmaz. Amennyiben egy táblát többször importálunk, ez az érték lehet: "Updated","Deleted", és Preserved is. Az "Undo"gombbal itt még lehetőség van visszavonni az importálást. Az "OK" gombbal az importálás befejeződik, és visszatérünk az előző képernyőhöz. (3-12. ábra) (3-13. ábra) 11 / 20 Új Oracle Modul – Cél (target) modul létrehozása Az előzőekben már létrehoztunk egy forrás Oracle modult az importálandó táblák számára, most az output (target) tábla számára is létrehozunk egy új Oracle modult. Azaz létrehozunk egy olyan új modult, ahova a forrástáblákból - esetleges transzformációk után - az adatokat betöltjük.

Leegyszerűsítve a cél modulokba tesszük azokat az adatbázis objektumainkat (illetve azok leíró adatait), amelyek az épülő adattárházunkba tartoznak. Természetesen, ahogy több forrás modulunk is lehet, létrehozhatunk több cél modult is. Gyakran külön cél modult hoznak létre az adattárházban tárolt különböző transzformációs szinten lévő adatrétegek számára, ezeknek a rétegeknek a céladatbázisban ugyanolyan nevű adatbázis sémák felelnek meg: Tipikus adatrétegek, ebből következően cél modulok és sémák lehetnek, például: • DWH STAGE: ide töltődnek egy az egyben (transzformáció nélkül) a forrásrendszeri adatfájlok (leggyakrabban CSV fájlok), ebben az adattárház rétegben az adatok általában még normalizált struktúrában tárolódnak. • DWH LOAD: historikusan tárolt forrásrendszeri (tranzakciós) adatok, általában minden betöltött rekord kiegészül egyedi azonosítóval (ID), és a betöltés dátumával (LOAD

DATE). Így lehetőség van forrásrendszer oldali hibajavítás esetén a törlésre és újratöltésre. • DWH DW: megtörténik az OLTP/OLAP struktúraváltás, azaz terített struktúrákba és/vagy multidimenzionális struktúrákba transzformáljuk a betöltött adatokat. • DWH DM: az adatpiac réteg, gyakran multidimenzionális struktúrájú. Szabványos adattárház környezetekben ezeket a rétegeket előre megtervezik, névkonvenciókat állapítanak meg használatukra, és előre létrehozzák ezeket az OWB modulokat, valamint az adattárház adatbázisban az ugyanolyan nevű felhasználókat/sémákat. Nyissuk le az "OWB PROJEKT1" projekt "Databases" ágát. Kattintsunk jobb gombbal az "Oracle"-re, majd válasszuk a "New Oracle Module" menüpontot. 12 / 20 (3-14. ábra) A varázsló végigvezet bennünket éppúgy, ahogy a forrás modul létrehozásánál is. A modulunk neve legyen BESZERZES MODUL. A következő

képernyőn a most létrehozott lokáción állva kattintsunk az Edit gombra. Itt meg kell adni a kapcsolati információkat User name: <saját usernév> (ide az output tábla séma-userét célszerű írni) Password: xxxxx Schema name: <saját usernév> (az output tábla sémájának neve) A varázsló befejezésével létrejött az új Oracle modulunk. 13 / 20 (3-15. ábra) Érdemes olyan névkonvenciót használni, ahol a modul nevében benne van a típusa is (forrás vagy cél). Ha ezt a konvenciót követjük, akkor a modulunknak például a BESZERZES CEL MODUL nevet is adhattuk volna. 14 / 20 Új Mapping (transzformáció) létrehozása Mi is valójában az OWB mapping? Egy OWB map program általában egy töltési folyamatot (sql vagy plsql kódot) ír le grafikus módon. Sok esetben nem más, mint egy "insert - select" sql utasítás. Nagy előnye, hogy gyorsan átlátható, és így könnyebben továbbfejleszthető, esetleges hátránya, hogy a

fejlesztési idő lelassulhat. Az adattárház projektek esetében nem ritka, hogy egyetlen select utasítás is több száz sorra rúg. Világos, hogy első ránézésre is sokkal többet mond egy jól megtervezett grafikus ábra, mintha az sql, vagy a plsql kódot kellene átnézni, és megérteni. Az OWB a "megrajzolt" map alapján legenerálja a neki megfelelő pl/sql utasítás sorozatot, így ezzel nem kell foglalkoznunk. További előnye, hogy ezt igyekszik szabványosan megtenni, olyan optimalizálást (hint) használ, és olyan sql-t generál, ami sokszor hatékonyabb, mintha egy nem teljesen hozzáértő fejlesztő írná magát az utasítást. Természetesen nem lehet általános célú eszközt minden specifikus feladatra hatékonyan használni, és abba a tévedésbe se essünk, hogy ha az ember megtanul "map-et rajzolgatni", akkor nem kell ismerni az sql-t. Sőt! Érdemes úgy kezdeni, hogy már a fejünkben van milyen utasítást szeretnénk

megvalósítani OWB map segítségével. Az OWB előnye sokkal inkább az üzemeltethetőség támogatásában rejlik. Egy olyan keretrendszert ad a felhasználói számára, amelyben ellenőrzötten, teljes körűen naplózva lehet indítani és menedzselni folyamatokat (ez lehet map, vagy ezekből felépített process flow is), és ehhez a fejlesztőknek "csak" a mapping megírására kell koncentrálniuk. Ez a fejezet egy egyszerű transzformációt végrehajtó map "megrajzolásával" foglalkozik, egyszerű operátorokat használva. A cél, hogy a jól ismert HR sémában található DEPARTMENTS és EMPLOYEES tábla összekapcsolásával (join) néhány oszlop értékét betöltsük egy általunk létrehozott új output táblába, amely a BESZERZES MODUL cél modulban fog helyet kapni. Ehhez már létrehoztuk a HR forrás modult, amely az adatbázis HR sémájára mutat, és a BESZERZES MODUL cél modult is, ami az adatbázis <saját usernév> sémájára

mutat. Most létre kell hoznunk a cél-táblát, ami viszont még nem létezik sem az adatbázisban, sem az OWB tervadattárában (repository). Az OWB programmal is készíthetünk új táblát, amit néhány kattintással az adatbázisba is automatikusan létrehozhatunk, de tervezésre sokkal jobb eszközök is léteznek, pl. az Oracle Designer. Egy adattárház projektnél nagy hangsúly van a tervezésen, így ha a tábla, amibe az eredmény adatainkat tölteni akarjuk, még nem létezik az adatbázisban, valószínűleg már létezik valamely tervezőeszköz tervadattárában. Célszerű tehát a táblát először az adatbázisban létrehozni, majd ezután beimportálni az OWB programba, ahogy azt korábban a HR séma tábláival is tettük. 15 / 20 A <saját usernév> felhasználóval belépve az adatbázisba, hozzuk létre a táblát, például ezzel a paranccsal: CREATE TABLE dolgozok( dolgozo neve VARCHAR2(100), osztaly neve VARCHAR2(100) ); Ezek után már csak

importálnunk kell a DOLGOZOK táblát. Most jutottunk el odáig, hogy létrehozzuk az első OWB map programunkat. Kattintsunk jobb gombbal a BESZERZES MODUL -> Mappings menüpontra, majd válasszuk a "New Mapping" menüpontot. (3-16. ábra) A varázsló üdvözöl minket, kattintsunk a "Next" gombra. 16 / 20 A map neve legyen dolgozo map, mást nem is kell megadnunk. A varázsló bezárása után automatikusan megnyíló ablakban elkezdhetjük a map létrehozását (ld. 3-17 ábra) Bal oldalon látjuk továbbra is a Project Navigatort-t, jobb oldalon fent az operátorokat tartalmazó palettát, alatta pedig a property ablakot. (Persze lehetőség van bármelyiket átmozgatni, vagy eltüntetni.) (3-17. ábra) Bal oldalról húzzuk fel az EMPLOYEES, JOBS és DEPARTMENTS táblákat a vászonra. Ezekből fogunk adatokat betölteni. Jobb felső sarokban található "Component Palette"-ról húzzunk be egy Joiner operátort. Szintén húzzuk be a

céltáblát is, ami az imént létrehozott DOLGOZOK tábla. Most az alábbihoz hasonló "rajzot" kell látunk. 17 / 20 (3-18. ábra) Most meghatározzuk, hogy milyen oszlopokra van szükségünk a forrástáblákból ahhoz, hogy a táblák összekapcsolását (join) meg tudjuk csinálni, illetve a kívánt oszlopokat (dolgozo neve és az osztály neve ahol dolgozik) be tudjuk tölteni a „DOLGOZOK” táblába. Figyeljük meg, hogy a joiner operátor két INGRP-vel (ingroup), és egy OUTGRP-vel (outgroup) jött létre. Az INGRP-k, azokat a táblákat reprezentálják, amikből select-álunk Jelen esetben ez csak két tábla, de akármennyi lehetne, így INGRP-ből többet is létrehozhatunk. OUTGRP-ből viszont csak egy lehet, ide jönnek létre automatikusan azok az oszlopnevek, melyeket behúzunk az INGRP-okba és az eredményhalmazt reprezentálják. A groupokat át is lehetne nevezni Ehhez az operátorra jobb gombbal kattintva válasszuk az "Open Details"

menüpontot. A "behúzás" pedig azt jelenti, hogy az egérrel megfogunk egy oszlopot, és a bal gombot lenyomva tartva egy vonalat húzunk a másik operátor adott groupjához, vagy oszlopához. Jelen esetben az Employees tábla FIRST NAME és DEPARTMENT ID oszlopát behúzzuk az INGRP1-be (melyet átneveztünk EMP-re), a Departments táblából pedig a DEPARTMENT ID és DEPARTMENT NAME oszlopokkal tesszük ugyanezt, csak az INGRP2-be, vagyis a DEP group-ba kerülnek. Látható, hogy mivel DEPARTMENT ID-ból kettő is van az outgrp-ban az egyik " 1"-essel fog szerepelni. Ezeket az oszlopokat azért kellett felvenni az operátorba, mert szükség van rájuk a join feltétel megadásánál, de látható, hogy a céltáblába már csak a FIRST NAME, és DEPARTMENT NAME oszlopokat visszük tovább. 18 / 20 (3-19. ábra) Adjuk meg az összekapcsolási (join) feltételt. Kattintsunk a join operátorra, és a jobb alsó sarokban található property ablakban

válasszuk a "Join condition"-t. A feltételhez állítsuk be: "EMP.DEPARTMENT ID = DEPDEPARTMENT ID" Ezt kézzel is beírhatjuk, de "össze is lehet kattintani" a megjelenő felület segítségével. 19 / 20 (3-20. ábra) A fentiek elvégzése utána ez a töltés késznek mondható. Az OWB le fogja generálni a megfelelő sql join utasítást, és az eredményt beszúrja (insert) a céltáblába. Generált kód előzetes megtekintése: A mapping legyen megnyitva -> vásznon jobb gomb -> Generate A kód egy részéhez tartozó SQL utasítások megtekintése: A fenti lépés után álljunk az operátor vagy a tábla OUTGRP-jára vagy INOUTGRP-jára, majd a Generation style-t állítsuk FULL-ról Intermediate-re. Map telepítése (deploy): Mappingen jobb gomb -> Deploy Eredmény: a lokáció által mutatott sémában létrejön a transzformációnak megfelelő PL/SQL package, amely a definiált töltést végre fogja hajtani. Map indítása:

Map-en jobb gomb -> Start Eredmény: A <saját usernév> sémában az előzőekben transzformációnak megfelelően adatokkal. létrehozott Dolgozok tábla feltöltődik a 20 / 20