CASUS eenvoudige CBS datamart

De CASUS is het ophalen van opendata uit het CBS register om vervolgens daarop enkele ETL's te definieeren voor de dimensies en vervolgens een FACT-ETL maken met lookup's naar deze dimensies.

Inleiding: Welk proces gaan we volgen, welke stappen en deze hieronder markeren.

Navigator

STAP 1: de bron

Doel: Open source bestand inladen met commando/call: …..
ophalen OPENDATA
deze query duurt ca 3600 seconden.

   CBS_OPENDATA_READ 84466NED

na bovenstaande CALL is een tabel gecreerd, genaamd CBS_OPENDATA_84466NED
de identifier van de dataset wordt de prefix van de tabel

   select top 10 * from xxx.CBS_OPENDATA_84466NED

STAP 2 : de dimensies

Doel: Enkele DIMENSIE-VIEWS maken voor het stermodel
- de xxx. staat voor de current-schema zoals in de grip_con.dat is opgegeven.
Behoeft niet in de ETL-call gebruikt..
- SOURCE : de naam van de bron-view of bron-tabel ( zonder xxx. )
- TARGET : de naam van de target-tabel. Indien de target tabel niet bestaat, wordt hij gecreeerd
op basis van de structuur van de SOURCE
- MERGE_KEYS : de unique key van de SOURCE/TABLE. Indien een van de attributen een null-value bevat
of wanneer de keys duplicaten kent, genereert GRIP een error en stagneert de ETL / FLOW.

create view xxx.DIM_TYPEZELFSTANDIGE_V
as 
   select   TYPEZELFSTANDIGE, sum(1) aantal 
   from xxx.CBS_OPENDATA_84466NED
    groupby TYPEZELFSTANDIGE 

    actualize_t2('| SOURCE DIM_TYPEZELFSTANDIGE_V | TARGET DIM_TYPEZELFSTANDIGE| MERGE_KEYS TYPEZELFSTANDIGE | ') 
create view xxx.DIM_GESLACHT_V
as
   select   GESLACHT , sum(1) aantal 
   from xxx.CBS_OPENDATA_84466NED
    groupby GESLACHT 

    actualize_t2('| SOURCE  DIM_GESLACHT_V | TARGET  DIM_GESLACHT |  MERGE_KEYS GESLACHT | ') 
create view xxx.DIM_KENMERKEN_V
as
   select   KENMERKEN , sum(1) aantal 
   from xxx.CBS_OPENDATA_84466NED
    groupby KENMERKEN 


   actualize_t2('| SOURCE  DIM_KENMERKEN_V | TARGET  DIM_KENMERKEN |  MERGE_KEYS KENMERKEN | ') 
create view xxx.DIM_PERIODEN_V
as
   select   PERIODEN , sum(1) aantal 
   from xxx.CBS_OPENDATA_84466NED
    groupby PERIODEN 

    actualize_t2('| SOURCE  DIM_PERIODEN_V | TARGET  DIM_PERIODEN |  MERGE_KEYS  PERIODEN | ') 
create view xxx.DIM_INKOMEN_V
as
   select   GEMIDDELDPERSOONLIJKINKOMEN_2 INKOMEN, sum(1) aantal 
   from xxx.CBS_OPENDATA_84466NED
   where GEMIDDELDPERSOONLIJKINKOMEN_2 is notnull
    groupby GEMIDDELDPERSOONLIJKINKOMEN_2 

    actualize_t2('| SOURCE  DIM_INKOMEN_V | TARGET DIM_INKOMEN |  MERGE_KEYS  INKOMEN | ') 

STAP 3 : de fact

creatie van de FACT-view voor koppeling met de Dimensies.
desgewenst kunnen nog indexen en foreignkeys aangebracht worden ...

create  view xxx.FACT_84466NED_V
as
select distinct 
       coalesce (a.id,-1) DIM_TYPEZELFSTANDIGE_id
,      coalesce (b.id,-1) DIM_GESLACHT_id
,      coalesce (c.id,-1) DIM_KENMERKEN_id
,      coalesce (d.id,-1) DIM_PERIODEN_id
,      coalesce (e.id,-1) DIM_INKOMEN_id
from ( select  * from xxx.CBS_OPENDATA_84466NED ) x
leftjoinxxx.DIM_TYPEZELFSTANDIGE a on ( a.TYPEZELFSTANDIGE = x.TYPEZELFSTANDIGE ) 
leftjoinxxx.DIM_GESLACHT b         on ( b.GESLACHT  = x.GESLACHT ) 
leftjoinxxx.DIM_KENMERKEN c        on ( c.KENMERKEN = x.KENMERKEN ) 
leftjoinxxx.DIM_PERIODEN d         on ( d.PERIODEN  = x.PERIODEN ) 
leftjoinxxx.DIM_INKOMEN  e         on ( e.INKOMEN   = x.GEMIDDELDPERSOONLIJKINKOMEN_2 ) 


    actualize_t2('| SOURCE  FACT_84466NED_V | TARGET FACT_84466NED |  MERGE_KEYS DIM_TYPEZELFSTANDIGE_id,DIM_GESLACHT_id,DIM_KENMERKEN_id,DIM_PERIODEN_id,DIM_INKOMEN_id | ') 

STAP 4 : de flow

alle losse componenten nu verzameld in de FLOW. De FLOW kan uitgevoerd worden waarmee alle ETL's uitgevoerd worden. De flow kan vervolgens in de scheduler opgenomen worden om vervolgens iedere dag om 5 uur uitgevoerd te worden.

record_on('| PF_84466NED |')
    actualize_t2('| SOURCE DIM_TYPEZELFSTANDIGE_V | TARGET DIM_TYPEZELFSTANDIGE | MERGE_KEYS TYPEZELFSTANDIGE | ') 
    actualize_t2('| SOURCE DIM_GESLACHT_V         | TARGET  DIM_GESLACHT        | MERGE_KEYS GESLACHT | ') 
    actualize_t2('| SOURCE DIM_KENMERKEN_V        | TARGET  DIM_KENMERKEN       | MERGE_KEYS KENMERKEN | ') 
    actualize_t2('| SOURCE DIM_PERIODEN_V         | TARGET  DIM_PERIODEN        | MERGE_KEYS  PERIODEN | ') 
    actualize_t2('| SOURCE DIM_INKOMEN_V          | TARGET DIM_INKOMEN          | MERGE_KEYS  INKOMEN | ') 
    actualize_t2('| SOURCE FACT_84466NED_V        | TARGET FACT_84466NED        | MERGE_KEYS DIM_TYPEZELFSTANDIGE_id,DIM_GESLACHT_id,DIM_KENMERKEN_id,DIM_PERIODEN_id,DIM_INKOMEN_id | ') 
record_off()

flow_run('| FLOW PF_84466NED  | ')