pondělí 29. června 2009

ODI – Jak upravit IKM Slowly Changing Dimension Typ 2 i pro Typ 1

Není to tak dlouho co jsem psal o ODI a jeho podpoře Pomalu se měnících dimenzí druhého typu (SCD2 - Slowly Changing Dimension Type 2) – celý článek najdete zde.
Zkráceně: V ODI můžete každé tabulce nastavit atributy, které určují její chování v případě, že jde o Pomalu se měnící dimenzi (SCD). Logika zpracování pro SCD typu 2 je dodávaná v Integračních Knowledge Modulech (IKM Slowly Changing Dimension).



Minulý týden jsem řešil případ, kdy IKM Oracle Slowly Changing Dimension (je navržené pro SCD2) bylo potřeba využít i pro SCD typu 1. Důvod, proč dané IKM bylo potřeba použít i pro SCD1, byl čistě o připravenosti na budoucí přechod k SCD2.


Postup

Postup je stejný jako kdyby šlo o SCD2, ale na sloupcích tabulky se místo příznaku „Add Row on Change“ nastaví vždy příznak „Overwrite on Change“. Malá změna se pak musí udělat v použitém IKM. Protože když spustíte originální IKM s takto nastaveným chováním SCD, tak vám zpracování dimenze spadne v kroku „Flag rows for update“.

Chyba je v tom, že v příkazu UPDATE mezi WHERE a AND není žádný výraz:


Důvodem je to, že IKM očekává alespoň jeden sloupec, který je označen příznakem „Add Row on Change“, což v případě SCD1 není.

Řešením je jednoduchá úprava IKM - jděte do IKM Oracle Slowly Changing Dimension, otevřete krok „Flag rows for update“ a do stávajícího kódu


přidejte podmíněné AND (v případech kdy půjde o SCD2) a 1=1 (v případech kdy půjde pouze o SCD1).


Poté již IKM bude fungovat tak jak má pro oba dva typy SCD.

Kód pro SCD1 bude vypadat následovně - obsahuje pouze WHERE 1=1 AND ...:



Kód pro SCD2 bude vypadat následovně - obsahuje WHERE (sloupce s „Add Row on Change“) AND 1=1 AND ...)




Erik Eckhardt.

Žádné komentáře: