dinsdag 30 juni 2020

BODS BTL TEMPLATE

1 BTL

1.1 LAADMODUS


3 verschillende laadmodus  : Init, Full en Delta

·         INIT
1x draaien. BTL doeltabel is helemaal leeg. Met draaien wordt elk allereerste (oudste) record per bkey geladen met een begindatum ‘1-1-1900’.
Dit wordt gedaan zodat niet de allereerste laaddatum als begindatum gezet wordt want de beginstand geldt ook al eerder dan de eerste laaddatum.

Waarom het allereerste (oudste)  record?
Er zijn 2 situaties
1.       STG--> CM---> BTL   (wordt in 1x gedraaid). Dan is er maar 1 oudste record en gaat alles goed
2.       STG__> CM wordt al een half jaar gedraaid en pas nu besluit met om er iets meet e gaan doen. Dan moet voor het laden van de INIT alleen de allereerste waarde van de bkey geladen worden. Hier is dus het oudste record voor nodig

Init wordt dus maar 1x geladen. Daarna krijg je periodiek draaien (dagelijks, maandelijks,etc)
Dit gebeurt met Delta of Full
PS: audit_sid speelt hier een belangrijk rol. Is een VARCHAR die oploopt in de tijd.


·         DELTA
Alleen Delta van CM . Op basis van hoogste audit_sid in BTL wordt gekeken wat er in CM veranderd is. Dat wordt dan geladen.

·         FULL
Hele CM met actief =1 hou je tegen BTL aan. Wanneer een FULL. Als er meerder CM tabellen voor 1 BTL gebruikt worden dan moet je het met FULL doen  want dan werkt truukje met audit_sid niet meer

1.2 Template BTL



Hoe moet je Delta en Full gedeelte zien

Er zijn 2 varianten beschrijven. Een delta en een full. Per dimensie/feit kan je kiezen welke variant je gebruikt.  Het kan dus zijn dat je een Delta voor dimensie 1 hebt en een full voor dimensie 2 en een delta voor Feit1 en een full voor Feit2

Geeft de mogelijkheid om te kiezen afh. Bijv hoe vaak draait het , is het een grote tabel etc

FULL/Delta gedeelte
TDF_BTL_INIT_D_DUMMY1 is een voorbeeld van een transactiefeiten tabel
TDF_BTL_FULL_F_DUMMY1 is een voorbeeld van een gestapelde feittabel (archieven)
Accumulated wordt niet veel gebruikt.

1.2.1 INIT gedeelte

TDF_BTL_INIT_D_DUMMY1: maakt van attribuut 1 een dimensie
TDF_BTL_INIT_D_DUMMY2: maakt van attribuut 2 een dimensie
TDF_BTL_INIT_F_DUMMY1; is een voorbeeld van een gemaakte keuze: hier nu periodieke snapshot feitentabel maar kan alles zijn

1.2.2 TDF_BTL_INIT_D_DUMMY1

Init betekent eenmalig, dus maar 1 keer en wel de allereerste keer. Nadat de INIT dataflow heeft gedraaid wordt vervolgens periodiek gedraaid met of een DELTA load of een FULL load.

Bij de init dataflow krijgt het eerste record per business key  een geldigheid van 1-1-1900. De reden om per business key en niet per eerste load te doen, heeft te maken met het het geval dat je feit eventueel eerder geladen kan zijn waardoor er geen dimensie waarde gevonden kan worden in geval de BTL opnieuw zou worden opgebouwd vanuit de CM.

Tevens worden er twee default waarden aan elke dimensie tabel in de BTL toegevoegd, nl:
1)   -1 => (Onbekend) bkey is leeg
2)   -2 => (Ongeldig)  bkey is niet bekend in dimensie tabel

Qx_min : bepaal per BK de allereerste startdatum

Qx_JN :
indien je al historie hebt opgebouwd in de CM alsnog een init draaien in de BTL waardoor ALLEEN het allereerste record per business key van de CM een startdatum van 1-1-1900 meekrijgt in de BTL

1.2.3 TDF_BTL_INIT_F_DUMMY1

 In template is dit een voorbeeld van een gemaakte keuze: hier nu periodieke snapshot feitentabel maar kan alles zijn . Ook transactie of cumulatief.
Bij dimensies wordt alles initieel in 1x verwerkt. Bij de periodieke snapshot kan dit anders zijn.
Bijv. Stel je CM heeft data opgebouwd van heel 2018 en je gaat nu initeel laden. En je wil per kwartaal een stand opbouwen. Dan moet deze dataflow 4 x gedraaid worden, bijv door 4x  deze DATAFLOW  achter elkaar te zetten met steeds een andere peildatum. (31-3-2018, 31-6-2018, 31-9 en 31-12)

F_Dumm1 heeft targettabel met delete records, de volgende 3 hebben Append



1.3 UITWERKING TDF_BTL_FULL _D_DUMMY2


Dit is de FULL BTL mapping met in dit voorbeeld 1 brontabel. Full houdt in dat alle actieve rijen (MTA_ACTIEF_INDICATIE=1) uit de bron geselecteerd worden. Dit houdt in dat de laatste actieve versie van de bkey wordt geselecteerd. Mochten er ondertussen meerdere versies zijn geweest in de CM dan mis je de tussenversies op deze wijze. Het is dus zaak om de BTL periodiek te laten lopen en anders eventueel voor de delta variant te kiezen.

Er is de keuze gemaakt om de BTL zijn eigen historie preserving uit te laten voeren, om de volgende redenen:
1) er worden meestal meerdere brontabellen gecombineerd tot 1 BTL tabel waardoor eigenhandig nieuwe tijdsloten ontstaan
2) er wordt vanuit gegaan dat de BTL altijd na of periodiek na de CM wordt geladen.

In dit geval is wel voor gekozen om de MTA_GELDIG_VAN_DATUMTIJD over te nemen van de CM tabel. Dit houdt in dat de BTL en de CM qua geldig_van synchroon blijven lopen.

In de CM laag worden verwijderingen bijgehouden door een nieuw record aan te maken. Hierdoor hoeft de TC niet meer op verwijderde rijen te controleren


Stappenplan:
1) replicate deze dataflow
2) neem je nieuwe bron tabel  op aan de linker kant als bron
3) neem je doeltabel 1 keer als doel
4) in transform QY_SELECT_ATTR1 de volgende MTA velden meenemen: MTA_BKEY,MTA_GELDIG_VAN_DATUMTIJD,MTA_VERWIJDERD_IND ,MTA_BRON_CODE

5) in transform QY_SELECT_ATTR1 order by op MTA_BKEY en MTA_GELDIG_VAN_DATUMTIJD.
(de laaste sort kolum MTA_GELDIG_VAN_DATUMTIJD zal in dit geval weinig effect hebben omdat er maar 1 bkey geselecteerd wordt. Bij Delta is dit wel heel belangrijk)

Where clause ==> CM_DUMMY_1.MTA_ACTIEF_INDICATIE=1  dus alleen laatste wijziging. Geen tussenresultaten

6) in TC niet checken op verwijderde records, input contains duplicate keys aanzetten, als input primary kolom MTA_BKEY selecteren, filter MTA_AKTIEF_INDICATIE=1 en als compare kolommen alleen de gewone attributen EN MTA_VERWIJDERD_IND

Input contains duplicate keys staat aan: Betreft duplicate MTA_BKEY (dus niet MTA_SID )omdat per bkey meerdere rijen kan krijgen

Sorted input  gaat over Bron tabel : bods gaat klagen als er geen sortering. Door  sorted input  gaat Bods zelf de target data ophalen met de zelfde sortering
Zie Validation/Optimized sql :   TCR : betekent BODS ziet dat er gesorteerde input in een Table Compare komt, is dezeldfde sortering als brontabel

In de CM laag worden verwijderingen bijgehouden door een nieuw record aan te maken. Hierdoor hoeft de TC niet meer op verwijderde rijen te controleren




Principe mbt velden TC
De velden die je links aanbiedt gaan overgenomen worden bij een UPDATE of INSERT, dus de andere velden  zijn niet gevuld, dus
Deze velden worden later in het proces gevuld
Mta_sid  --> bij KG
MTA_GELDIG_TOT_DATUMTIJD  --> HP
MTA_AANMAAK_DATUMTIJD, MTA_GEWIJZIGD_DATUMTIJD--> bij MAP
MTA_ACTIEF_INDICATIE  --> bij HP
MTA_AUDIT_SID  --> bij MAP

7) in HP in compare columns alleen je eigen attributen zetten  EN MTA_VERWIJDERD_INDICATIE


8) in MAP transform niks veranderen

VELD
INSERT/NORMAL
UPDATE
MTA_AANMAAK_DATUMTIJD
$G_LAAD_DATUM

MTA_GEWIJZIGD_DATUMTIJD
$G_LAAD_DATUM
$G_LAAD_DATUM
MTA_AUDIT_SID
$G_JOB_RUNID
$G_JOB_RUNID




MTA_AANMAAK_DATUMTIJD
9) Key generation transform de kolom MTA_SID van de doeltabel selecteren

10) op doeltabel niveau bij options 'include in transactions' op Yes zetten, transaction order = 0 en 'Commit at the end of insert .. select'  op Yes



1.1 UITWERKING TDF_BTL_DELTA _D_DUMMY2


Dit is de delta BTL mapping met in dit voorbeeld 1 brontabel.
Delta houdt in dat alleen de gewijzigde rijen obv mta_audit_sid in de bron worden ter vergelijking aangeboden aan de TC.

Er is de keuze gemaakt om de BTL zijn eigen historie preserving uit te laten voeren, om de volgende redenen:
1) er worden meestal meerdere brontabellen gecombineerd tot 1 BTL tabel waardoor eigenhandig nieuwe tijdsloten ontstaan
2) er wordt vanuit gegaan dat de BTL altijd na of periodiek na de CM wordt geladen.

In dit geval is wel voor gekozen om de MTA_GELDIG_VAN_DATUMTIJD over te nemen van de CM tabel. Dit houdt in dat de BTL en de CM qua geldig_van synchroon blijven lopen. Denk er wel aan om in de QY_SELECT_ATTR1 te sorteren op MTA_BKEY EN MTA_GELDIG_VAN_DATUMTIJD waardoor indien per bkey meerdere records worden aangeboden, deze records in volgorde van geldigheid worden verwerkt.
!Deze sortering is essentieel voor de goede werking. Er wordt dus per bkey gesorteerd op MTA_GELDIG_VAN_DATUMTIJD en deze worden dan ook in deze volgorde verwerkt. Hierdoor worden dus alle wijzigingen in een Bkey die zijn geweest in de CM en nog niet verwert waren in BTL , netjes in de juiste volgorde verwerkt

TC
Input contains duplicate keys staat aan: Betreft de Bkey (dus niet MTA_SID )omdat per bkey meerdere rijen kan krijgen

Sorted input  gaat over Bron tabel : bods gaat klagen als er geen sortering. Door  sorted input  gaat Bods zelf de target data ophalen met de zelfde sortering
Zie Validation/Optimized sql :   TCR : betekent BODS ziet dat er gesorteerde input in een Table Compare komt, is dezeldfde sortering als brontabel
In de CM laag worden verwijderingen bijgehouden door een nieuw record aan te maken. Hierdoor hoeft de TC niet meer op verwijderde rijen te controleren

Stappenplan:
1) replicate deze dataflow
2) neem je nieuwe bron tabel  op aan de linker kant als bron
3) neem je doeltabel 1 keer op als doel
4) in transform QY_SELECT_ATTR1 de volgende MTA velden meenemen: MTA_BKEY,MTA_GELDIG_VAN_DATUMTIJD,MTA_VERWIJDERD_IND ,MTA_BRON_CODE
5) in transform QY_SELECT_ATTR1 order by op MTA_BKEY en MTA_GELDIG_VAN_DATUMTIJD
6) in TC niet checken op verwijderde records, input contains duplicate keys aanzetten, als input primary kolom MTA_BKEY selecteren, filter MTA_AKTIEF_INDICATIE=1 en als compare kolommen alleen de gewone attributen EN MTA_VERWIJDERD_IND
7) in HP in compare columns alleen je eigen attributen zetten  EN MTA_VERWIJDERD_IND
8) in MAP transform niks veranderen
9) Key generation transform de kolom MTA_SID van de doeltabel selecteren
10) op doeltabel niveau bij options 'include in transactions' op Yes zetten, transaction order = 0 en 'Commit at the end of insert .. select'  op Yes

Geen opmerkingen:

Een reactie posten