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:
Okomentovat