čtvrtek 3. prosince 2009

Úprava RKM pro automatické nastavení typu SCD sloupce dimenze

Na projektu používáme ODI pro implementaci ELT procesů plnících datový sklad. Datový model udržujeme ve UML case nástroji (Enterprise Architect).

Před zahájením implementace transformací zajišťujících plnění datového skladu je nutno do ODI načíst metadata popisující tabulky, které slouží jako zdroj nebo cíl transformace. K tomu slouží v ODI reverse engineering knowledge moduly (RKM), které jsou dodávány pro různé databázové platformy.

Pro implementaci transformací (v ODI se nazývá interface) zajišťujících plnění dimenzí druhého typu (SCD2) datového skladu je nezbytné v rámci metadat korektně nastavit SCD chování sloupce cílové tabulky (podrobnosti viz. tento článek). Tuto operaci je obvykle nutné provést manuálně po importu metadat cílového schématu. V rámci ODI není tato operace vyřešena úplně ergonomicky – pro každý sloupec je nutné spustit editor sloupce, poté vybrat záložku „Description“ a zde zvolit požadovaný typ historie, což je relativně časově náročné. Pokud se na tento krok zapomene nebo v něm vývojář udělá chybu, jsou transformace plnící danou dimenzi nefunkční nebo se chovají neočekávaně.

Manuální nastavení typu historie sloupce


Vzhledem k tomu, že typ historie sloupce dimenze evidujeme již v datovém modelu, rozhodli jsme se upravit dodávaný RKM tak, aby došlo k automatickému nastavení typu historie sloupců dimenze v ODI.

Nejprve je nutno zpropagovat informaci o typu historie sloupce z modelu v case nástroji do metadat databáze. Rozhodli jsme se na začátek komentáře sloupce vkládám 4 místný kód určující typ historie daného sloupce – např. [SK] pro umělý klíč, [NK] pro přirozený klíč, což jsme provedli jednoduchou úpravou šablony pro vygenerování zakládacího skriptu dimenze. Před vygenerováním kódu z case nástroje je provedena validace modelu, která mimo jiné kontroluje nastavení typu historie pro sloupce dimenze. V databázi tak komentář všech sloupců dimenze začíná kódem typu historie, který využíváme následně při reverse engineeringu metadat do ODI. Alternativně je možno vytvořit vlastní „meta“ tabulku obsahující potřebná metadata, nebo využít jmenných konvencí.

Nyní již k samotné úpravě RKM. Nejprve jsem zduplikoval dodávaný „RKM Oracle v 10.1.3.4“. RKM fungují tak, že nejprve naplní pomocné tabulky s prefixem SNP_REV a na základě těchto tabulek se nastaví metadata v ODI. Vzhledem k tomu, že pomocná tabulka SNP_REV_COL již obsahuje potřebný sloupec SCD_COL_TYPE, stačilo pouze upravit krok 41 „Get columns“.

V založce „Command on target“ jsem přidal plnění sloupce SCD_COL_TYPE:

insert into SNP_REV_COL
(
I_MOD,
TABLE_NAME,
COL_NAME,
DT_DRIVER,
COL_HEADING,

COL_DESC,

POS,

LONGC,

SCALEC,

COL_MANDATORY,

CHECK_STAT,

CHECK_FLOW,

SCD_COL_TYPE

)


values
(

<%=odiRef.getModel("ID")%>,

:TABLE_NAME,

:COL_NAME,

:DT_DRIVER,

:COL_HEADING,

:COL_DESC,

:POS,

:LONGC,

:SCALEC,

:COL_MANDATORY,

'1',

'1',

:SCD_COL_TYPE

)

V záložce „Command on source“ jsme přidali určení typu historie sloupce na základe prefixu komentáře:

...

from ALL_TAB_COLUMNS c,

ALL_COL_COMMENTS cc,

ALL_OBJECTS o

...


case

when substr(cc.comments,1,4)='[SK]' then 'SK' --Surrogate key

when substr(cc.comments,1,4)='[NK]' then 'NK' --Natural key

when substr(cc.comments,1,4)='[OC]' then 'OC' --Overwrite on change

when substr(cc.comments,1,4)='[IR]' then 'IR' --Insert row on change

when substr(cc.comments,1,4)='[CR]' then 'CR' --Current record flag

when substr(cc.comments,1,4)='[ST]' then 'ST' --Starting timestamp

when substr(cc.comments,1,4)='[ET]' then 'ET' --Ending timestamp

else null

end scd_col_type

...


Tím je úprava RKM hotova. Vše ostatní zařídí krok 111 „Set metadata“. Díky této drobné úpravě nemusíme manuálně editovat metadata cílového schématu datového skladu, což zvyšuje efektivitu vývojého procesu a eliminuje riziko vzniku zbytečných chyb.


Karel Hubl (GEM System International)


Žádné komentáře: