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.
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 | ')