Gegevensstroom
Deze pagina beschrijft hoe Yres één load uitvoert: van het moment dat een pipeline start tot het moment dat de data gehistoriseerd in het datawarehouse staat. Het is de rode draad onder alle andere concepten — wie deze stroom begrijpt, begrijpt waarom een load type doet wat het doet en waar monitoring zijn cijfers vandaan haalt.
Het kernidee: metadata stuurt, code is generiek
Niets over de tabellen van een specifieke klant is hardcoded in ADF of in SQL. De databank publiceert via één view "hier is elke tabel die geladen moet worden, met al zijn parameters"; ADF leest die view, waaiert uit, kopieert bytes naar de stagingtabel en roept SQL terug aan om de echte merge te doen.
Een bron toevoegen = metadata-rijen invoegen, geen pipeline schrijven.
- De contract-view is
[LoadManagement].[vwExtractor]. Die is een one-liner pass-through:SELECT * FROM [LoadManagement].[fxExtractor](NULL,NULL). - Alle logica zit dus in de table-valued functie
[LoadManagement].[fxExtractor]((@LoadFilter, @LoadType)— slechts twee parameters). Elke rij diefxExtractorteruggeeft is één tabel om te laden, met alle parameters die ADF stroomafwaarts doorgeeft: het load type, het kant-en-klareDeltaScript, de doel-schemanamen, file-/parse-opties en de paginatie-instellingen.
ADF is een generieke executor. De load-logica leeft volledig in SQL. ADF verplaatst alleen bytes naar STAGE.<Target> en roept dan een stored procedure aan.
De stroom in één oogopslag
De gezaghebbende orchestrator is de pipeline Dynamic Workflow YRES (op oudere versies heet die nog Dynamic Workflow IRIS). Hij krijgt parameters mee — Source, Schema, Table, LoadType, RunningTier, RevertToTier — en doorloopt de volgende stappen.
Trigger / handmatige run / web-app-aanroep
params: Source, Schema, Table, LoadType, RunningTier, RevertToTier
│
▼
Dynamic Workflow YRES
1. WLS Start workflow → [Monitoring].[spWriteLoadStatus] (start loggen)
2. (optioneel) DB opschalen → [Config].[spSetDatabaseServiceTier] (alleen als een tier is meegegeven)
3. Get tables (Lookup) → [LoadManagement].[spPrepareWorkload]
└→ vwExtractor → fxExtractor (welke tabellen + parameters?)
4. ForEach "Load data" (parallel, batchCount 5) — per tabel:
├─ Orchestration - Hub → Orchestration - Switch 1 (switch op Source)
│ └→ Dynamic Pipeline YRES - <Source>
│ bron → Copy → STAGE.<Target> (ADF verplaatst alleen bytes)
├─ Load DWH → [LoadManagement].[spLoadDWH]
│ └→ [LoadManagement].[spHIS_InsertAndUpdate] (STAGE → HIS, SCD2-merge)
├─ Load DL (optioneel) → Copy STAGE → Parquet in de Data Lake
├─ STAGE truncaten → [LoadManagement].[spSTAGE_TruncateTable] (overgeslagen bij keepStage=1)
└─ WLS End load → [Monitoring].[spWriteLoadStatus] (status per stap)
5. Materialize Views → [LoadManagement].[spMaterializeViews]
6. (optioneel) DB terugschalen
7. WLS End Workflow → [Monitoring].[spWriteLoadStatus] (afsluiten + reconciliëren)
Stap voor stap
- Start van de workflow.
WLS Start workflowroept[Monitoring].[spWriteLoadStatus]aan. Dat opent een rij inMonitoring.LS_Pipeline(één rij per run) en logt de eerste stap inMonitoring.LS_Trans(één rij per stap). - Optioneel opschalen. Als de run een hogere service tier meekrijgt, schaalt
[Config].[spSetDatabaseServiceTier]de Azure SQL-database tijdelijk op voor zwaarder werk. - Werklijst ophalen. Een Lookup roept
[LoadManagement].[spPrepareWorkload]aan, die viavwExtractor→fxExtractorde lijst van te laden tabellen teruggeeft. Elke rij draagt alle laadparameters. - Per tabel laden (ForEach). De
ForEach-activiteit "Load data" draait parallel (batchCount5). Per tabel gebeurt het volgende:- Bron → STAGE.
Orchestration - Hub→Orchestration - Switch 1schakelt op de waarde vanSourceen start de juiste bronpipelineDynamic Pipeline YRES - <Source>. Die voert éénCopy-activiteit uit die de brondata letterlijk kopieert naarSTAGE.<Target>, met eenETL_Date-kolom erbij. ADF verplaatst hier alleen bytes. - STAGE → HIS.
Load DWHroept[LoadManagement].[spLoadDWH]aan, een dunne pass-through naar[LoadManagement].[spHIS_InsertAndUpdate]. Deze procedure doet de echte, set-based SCD2-merge vanSTAGEnaar de history-laag (zie SCD2 & hashing hieronder). - Optioneel naar de Data Lake.
Load DLkopieertSTAGEals Parquet naar Azure Data Lake Gen2 (alleen als het doel ook een Data-Lake-platform heeft). - STAGE opruimen.
[LoadManagement].[spSTAGE_TruncateTable]leegt de stagingtabel — tenzijkeepStage=1voor die tabel staat, dan blijft STAGE bewaard. - Status loggen.
WLS End loadschrijft viaspWriteLoadStatusde status (RUNNING/SUCCEEDED/FAILED) en de rij-aantallen per stap weg.
- Bron → STAGE.
- Views materialiseren. Na alle tabellen draait
[LoadManagement].[spMaterializeViews]om persisted/reporting-views bij te werken. - Optioneel terugschalen. Als er was opgeschaald, zet
Set DB Tier Backde database terug op de basistier. - Afsluiten.
WLS End Workflowsluit de run af, reconcilieert eventuele achtergebleven statussen en schrijft de eindstatus weg.
De enige plek waar Yres data daadwerkelijk verplaatst is de ADF Copy-activiteit (bron → STAGE, en optioneel STAGE → Parquet). Alle logica — wat nieuw is, wat gewijzigd is, wat afgesloten moet worden, hoe historie wordt opgebouwd — zit in de SQL-procedure spHIS_InsertAndUpdate. Dat is de strakke scheiding tussen orkestratie en logica.
SCD2: de historie-laag
spLoadDWH is een pure pass-through naar spHIS_InsertAndUpdate (de oude aanroep van spUpdateETL_EndDate staat uitgecommentarieerd — het afsluiten van versies gebeurt nu binnen spHIS_InsertAndUpdate zelf). Wat de merge precies doet hangt af van het load type, maar het mechanisme is voor alle types hetzelfde SCD2-model (Slowly Changing Dimension type 2):
- Op
STAGEstaan twee persisted computed columns,KeyHashenRowHash(varbinary(66), viaHASHBYTES('SHA2_512', …)).KeyHashis berekend over de sleutelkolommen,RowHashover de wijzigingsgevoelige kolommen. - De match-join is
STAGE.Keyhash = HIS.Keyhash AND HIS.isCurrent = 1; een rij is gewijzigd als bovendienSTAGE.Rowhash <> HIS.Rowhash. Een kolom metRowhash = 0telt niet mee in de wijzigingsdetectie. - Elke history-rij krijgt
ETL_Date(laadtijdstip) enETL_EndDate. Een open (actuele) versie heeft de sentinel'2999-01-01 00:00:00'enIsCurrent = 1. Wordt een rij gewijzigd, dan wordt de oude versie afgesloten (IsCurrent = 0,ETL_EndDate= het nieuweETL_Date) en komt er een nieuwe actuele versie bij.
FULL is een history-bewarende SCD2-upsert: nieuwe records worden ingevoegd, gewijzigde records krijgen een nieuwe versie (de oude wordt afgesloten), en records die in deze batch ontbreken blijven gewoon open staan. Alleen OVERWRITE wist historie (truncate van HIS); RELOAD sluit de oude generatie af maar behoudt die als historie. Zie Load types voor de volledige tabel.
Varianten van de workflow
| Pipeline | Wanneer |
|---|---|
Dynamic Workflow YRES | Standaard: ontdekt via vwExtractor welke tabellen te laden zijn en laadt ze in een ForEach-lus. |
Direct Workflow YRES | Laadt één specifiek doel, zonder de ontdekkings-lus. |
Dynamic Archiving Workflow YRES | Archivering: kopieert oude historie geverifieerd naar Parquet en schoont daarna op, gestuurd door het ArchivingScript op vwExtractor. |
In Orchestration - Switch 1 verwijst de Oracle-case naar de pipeline Dynamic Pipeline YRES - MySql — Oracle wordt dus via de MySql-ingestiepipeline afgehandeld.
Waar je de stroom terugziet
Elke ADF-stap roept spWriteLoadStatus aan, dat in drie tabellen logt:
Monitoring.LS_Pipeline— één rij per run.Monitoring.LS_Trans— één rij per stap (status + rij-aantallen + log).LoadManagement.LoadLog— één duurzame rij per tabel-load (status, start/eind, config-snapshot).
Voor analyse zijn er monitoring-views: vwLoads (tijdlijn per pipeline) en vwMonitor (breder, inclusief view-materialisatie en Power BI-refresh). De systeemchecks staan in [Maintenance].[vwYresChecks] (de bronfile heet nog vwIrisChecks.sql).
In de frontend zie je dit terug op het scherm Load management → Monitoring:

Het Monitoring-scherm leest direct uit Monitoring.LS_Trans; bij een mislukte run verschijnen de foutmelding en een link naar de ADF-run boven het overzicht.
- Targets-tree — Source / Schema / Table met een status-rollup per niveau.
- Geselecteerd doel met een samenvatting van grootte en aantal records.
- Reset table — zet de tabel terug (met bevestiging).
- Runs-grid — per run: Status, DateTime, Load type, Runtime, Copied, New en Delta.
- Per-run-acties — het info-icoon opent de stappen-modal; het klok-icoon start een rollback.
- Stappen-modal — Step / DateTime / Status / Log / Rows per stap binnen de run.
Zie ook
- Load types — wat elk type met de doeltabel doet.
- Yres uitgelegd — het platform in gewone taal.
- Begrippenlijst — terminologie (HIS, STAGE, ODS, Dictionary, …).
- Databron koppelen & laden — een bron toevoegen en laden.