Declaratieve datapijplijnen in Fabric met Materialized Lake Views

Waarom Materialized Lake Views?

Data engineers besteden vaak te veel tijd aan het orchestreren van pijplijnen in plaats van aan het transformeren van data. De nieuwe Materialized Lake Views (MLV's) van Microsoft Fabric veranderen dat. Ze laten je transformaties in SQL declareren, en Fabric zorgt automatisch voor persistentie, refresh-scheduling, lineage, monitoring en zelfs datakwaliteitsvalidatie.

Microsoft beschrijft MLV's als declaratieve pijplijnen voor je Lakehouse: jij zegt wat je wilt, en Fabric regelt het hoe.

In tegenstelling tot traditionele pijplijnen waar je zelf orchestratie, error handling en kwaliteitscontroles moet bouwen, integreren MLV's deze aspecten by design. Met eenvoudige SQL-constraints kun je datakwaliteitsregels afdwingen (ongeldige records droppen of de pijplijn stoppen bij overtredingen), en Fabric genereert automatisch rapporten en lineage-inzichten om ze te monitoren.

We onderzochten deze functionaliteit in detail en vergeleken ze met ons Fabric Ignite Framework, dat dbt gebruikt voor transformaties.

Beide benaderingen willen betrouwbare, analytics-ready data leveren, maar ze verschillen in setupinspanning, flexibiliteit en governancemodel.

Deze blog geeft een overzicht op hoofdlijnen van MLV's en hun vergelijking met dbt.

Voor wie onze stapsgewijze setup en technische testscenario's in detail wil volgen, hebben we de volledige technische documentatie beschikbaar gemaakt 👉 

Hoe werken MLV's?

  • Gedefinieerd met SQL in notebooks of de UI (PySpark-ondersteuning is gepland).
  • Resultaten worden opgeslagen als Delta-tabellen in OneLake, geoptimaliseerd voor Power BI Direct Lake.
  • Automatische lineage-tracking en dataflow-orchestratie: geen manuele pijplijnsetup nodig.
  • Ingebouwde datakwaliteitscontroles via constraints:

ON MISMATCH FAIL: stopt de uitvoering van de pijplijn.

ON MISMATCH DROP: slaat ongeldige rijen over maar zet de uitvoering van de pijplijn voort.

Voorbeeld: van Bronze naar Gold

Met de AdventureWorks-dataset implementeerden we een klassieke Medallion-architectuur met
MLV's

·       Bronze: ruwe CSV's (sales, adressen, kredietkaarten, personen). 

·       Silver: opgeschoonde, verrijkte views, bv.

addresses voegt State- en Country-namen toe.

creditcards joint de naam van de houder uit de person-tabel.

·       Gold: geaggregeerde orderheaders, die salesdata combineren met verrijkte adressen en kredietkaartinfo.

Datakwaliteit monitoren 

·        De lineage-view in Fabric toont de afhankelijkheden tussen MLV's en genereert een uitvoerbare pijplijn. 

·        Refreshes zijn slim: als er geen brondata is gewijzigd, wordt de run overgeslagen. (Momenteel alleen full refresh; incremental refresh staat op de roadmap.) 

·        Ingebouwde monitoring via:

sys_dq_metrics-tabel: gedropte records, overtredingen per constraint.

Automatisch gegenereerde Data Quality Reports: overzicht en detail per MLV.

Voordelen van MLV's

MLV's worden volledig aangemaakt, ofwel in de UI van Fabric, ofwel als een SQL-query in een Notebook. Fabric verzorgt alle backend-verwerking voor jou (refresh-logica, pijplijnbeheer op basis van afhankelijkheden tussen MLV's en hun bronnen, afhandeling van overtredingen van datakwaliteitsregels, scheduling, monitoring en rapportering).

Analisten en dataprofessionals hoeven alleen in een SQL-query te definiëren wat ze willen (transformaties, aggregaties, datakwaliteitsregels en -acties, enz.), zonder dat ze extra infrastructuur en/of engineeringvaardigheden nodig hebben.

Ze passen volledig in het ecosysteem van Microsoft Fabric zonder manueel ontwikkelwerk en/of een complexe setup te vereisen.

MLV's zijn gematerialiseerd, wat betekent dat hun inhoud fysiek is opgeslagen en veel sneller kan worden bevraagd dan standaard views. Een efficiënte refresh-logica (alleen MLV's met wijzigingen in de brondata worden vernieuwd) verlaagt de verwerkingstijd en de kosten van cloudresources. (Opmerking: ondersteunt momenteel full refresh of geen refresh; incrementeel laden is gepland in toekomstige updates.)

Beperkingen vandaag

Dit is een eerste versie van MLV's; verschillende features staan nog op de roadmap voor toekomstige releases (zoals ondersteuning voor declaratieve syntax voor PySpark (waar momenteel alleen SQL kan worden gebruikt), incremental refresh-mogelijkheden, API-ondersteuning voor het beheren van MLV's, cross-lakehouse lineage- en uitvoeringsfeatures, enz.). Er gelden enkele beperkingen op het gebruik van functies en patroonzoekopdrachten met operators zoals LIKE of regex in constraint-condities.

Een lineage van opeenvolgende Materialized Lake Views is vereist om er zeker van te zijn dat de DataFlow/pijplijn correct wordt gegenereerd; andere types transformaties worden niet in aanmerking genomen. Brontabellen moeten ook via een ander type transformatie worden geladen (en via een eigen pijplijn); het laden ervan maakt geen deel uit van de MLV-DataFlow/schedule. Er bestaat slechts één MLV-DataFlow/schedule, inclusief alle MLV's, zelfs als ze niet aan elkaar gerelateerd zijn. Er bestaat geen mogelijkheid om de MLV-DataFlow/schedule op te splitsen in bijvoorbeeld Subject Areas.

Falende datakwaliteitscontroles resulteren in een van de volgende acties: ofwel de records met een falende datakwaliteitscontrole droppen, ofwel de uitvoering van de MLV en de daaropvolgende MLV's stoppen. Deze 2 types acties worden echter verschillend gemonitord (de MLV-runs in de lineage tonen alleen de falende uitvoering van de MLV's door DQ-fouten, terwijl de sys_dq_metrics-tabel alleen het aantal gedropte records tijdens een MLV-uitvoering toont), wat het moeilijker maakt om dit op te volgen.

Er is momenteel noch een testframework, noch Git-integratie beschikbaar.

Vooruitblik

Materialized Lake Views zijn nog jong, maar Microsoft ontwikkelt ze snel verder. Incremental refresh en PySpark-ondersteuning staan al op de roadmap. Diepere integratie met Purview, Git en API's ontbreekt momenteel.

Vandaag zijn MLV's al een uitstekende keuze voor de snelle levering van gecureerde datasets in Fabric, zeker in combinatie met Power BI Direct Lake.

Vooruitkijkend verwachten we dat MLV's nog krachtiger worden met mogelijkheden zoals:

  • Slimmere incrementele verwerking
  • Rijkere ingebouwde datakwaliteit en testing
  • Volledige Git-gebaseerde samenwerking en CI/CD-ondersteuning
  • Cross-lakehouse lineage voor enterprise data mesh
  • Performanceoptimalisaties met adaptieve refresh en caching

Deze innovaties zullen MLV's tillen van een low-code-enabler naar een strategische enterprise-oplossing voor geavanceerde analytics engineering.

Fabric Ignite Framework met dbt versus Fabric Materialized Lake Views

In ons Fabric Ignite framework, vertrouwen we op dbt voor het beheren van transformaties. dbt geeft ons geavanceerde testing, Git-gebaseerde workflows en volwassen incremental refresh-mogelijkheden: features waar data engineers van houden bij het bouwen van complexe, gegovernde pijplijnen.

Met de komst van Materialized Lake Views (MLV's) in Fabric zien we nu een aantrekkelijk alternatief voor bepaalde scenario's. MLV's blinken uit wanneer je snelle levering van gecureerde datasets, minimale setup en Fabric-native governance wilt, terwijl dbt sterker blijft voor incrementele modellen, geavanceerde testing en CI/CD-best practices.

In de praktijk zullen veel organisaties waarschijnlijk beide benaderingen combineren: MLV's gebruiken voor low-code, Fabric-native workloads, en dbt inzetten waar engineeringcomplexiteit, portabiliteit en DevOps-praktijken essentieel zijn.

Vergelijking tussen MLV en dbt:

Feature / behoefte

Materialized Lake Views (MLV)

dbt

Setuptijd

Minuten, volledig in de Fabric-UI

Vereist setup van dbt Core/Cloud, Git-repo, configs

Incremental refresh

❌ (alleen full refresh, incrementeel gepland)

✅ Native incrementele modellen

Governance-integratie

✅ Volledige Fabric/Purview lineage-monitoring

Gedeeltelijk: vereist extra integratie

Afhankelijkheidsbeheer

✅ Auto-refresh op basis van lineage binnen Fabric

✅ Expliciete DAG via ref()

Testframework

❌ Niets ingebouwd

✅ Uitgebreide ingebouwde + custom tests

Versiebeheer

❌ Geen Git-integratie

✅ Git-native workflows

Cross-platform

❌ Alleen Fabric

✅ Veel warehouses + lakehouses ondersteund

Leercurve

Laag (SQL-gericht)

Hoger (YAML, Jinja, CLI, Git)

Best geschikt voor

Eenvoudige tot gemiddelde transformaties in Lakehouse, volledig door Fabric beheerd

Complexe, geëngineerde transformaties, CI/CD, multi-platform

Use case

Er werd een use case opgezet volgens de medallion-architectuur door data in drie lagen te organiseren:

  • bronze (ruwe data)
  • silver (opgeschoonde en verrijkte data)
  • gold (geaggregeerde en geanalyseerde data).

Enkele tabellen uit het AdventureWorks 2008 OLTP-schema (een voorbeelddatabase voor Microsoft SQL Server) worden gebruikt als bron voor deze use case. Deze tabellen werden gedownload als CSV-bestanden en geladen als Delta Table in een Bronze -laag van Fabric:

Tabel

Beschrijving

Delta Table in Bronze-laag Fabric

Sales.SalesOrderHeader

Algemene informatie over verkooporders.

adventureworks_bronze.salesorderheader

Person.Address

Straatadresinformatie voor klanten, werknemers en leveranciers.

adventureworks_bronze.address

Person.StateProvince

Opzoektabel voor staten en provincies.

adventureworks_bronze.stateprovince

Person.CountryRegion

Opzoektabel met de ISO-standaardcodes voor landen en regio's.

adventureworks_bronze.countryregion

Sales.CreditCard

Kredietkaartinformatie van klanten.

adventureworks_bronze.creditcard

Sales.PersonCreditCard

Kruisverwijzingstabel die personen koppelt aan hun kredietkaartinformatie in de CreditCard-tabel.

adventureworks_bronze.personcreditcard

Person.Person

Personen die betrokken zijn bij AdventureWorks: werknemers, klantcontacten en leverancierscontacten.

adventureworks_bronze.person

Het datamodel van de Bronze-laag:

Opmerking: de bovenstaande tabelrelaties werden aan het datamodel toegevoegd nadat de MLV's (zie volgende stappen) waren aangemaakt, om het datamodel visueler te maken. Ze zijn niet noodzakelijk en/of worden niet door Fabric gebruikt om de MLV's op te zetten.

In de Silver -laag worden 2 verrijkte/opgeschoonde tabellen opgezet. Ze worden aangemaakt als Materialized Lake Views:

  • addresses Alle adressen in de brontabel address worden verrijkt met de StateProvince Name en CountryRegion Name die uit de juiste brontabellen worden opgehaald.
  • creditcards – Alle kredietkaarten in de brontabel creditcard worden verrijkt met de naam van de kredietkaarthouder, afgeleid uit de brontabel persons.

Om de ingebouwde datakwaliteitsmogelijkheden van MLV's te demonstreren, worden enkele constraints gedefinieerd:

  • addresses Alle adressen moeten een StateProvince Name en CountryRegion Name hebben. Als die niet uit de juiste brontabellen kunnen worden afgeleid, mag de MLV niet worden bijgewerkt en moet de pijplijn met een fout stoppen.
  • creditcards Alle kredietkaarten moeten een Number, Expiry Month en Expiry Year hebben. Als die niet uit de juiste brontabel kunnen worden afgeleid, mogen deze kredietkaarten niet in de MLV worden opgenomen, maar kan de uitvoering van de pijplijn doorgaan.

Aanmaakscripts voor de MLV's in de Silver-laag in Fabric:

				
					CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS adventureworks_silver.addresses
               (
     CONSTRAINT stateprovince_chk CHECK (StateProvince IS NOT NULL) ON MISMATCH FAIL,
     CONSTRAINT countryregion_chk CHECK (CountryRegion IS NOT NULL) ON MISMATCH FAIL
               )
             AS
         SELECT ad.AddressID,
                ad.AddressLine1,
                ad.AddressLine2,
                ad.City,
                ad.PostalCode,
                sp.Name StateProvince,
                cr.Name CountryRegion
           FROM adventureworks_bronze.address          ad 
LEFT OUTER JOIN adventureworks_bronze.stateprovince    sp 
             ON ad.StateProvinceID = sp.StateProvinceID
LEFT OUTER JOIN adventureworks_bronze.countryregion    cr 
             ON sp.CountryRegionCode = cr.CountryRegionCode;

				
			
				
					
         CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS adventureworks_silver.creditcards
               (
     CONSTRAINT cardnumber_chk      CHECK (CardNumber IS NOT NULL) ON MISMATCH DROP,
     CONSTRAINT expirationmonth_chk CHECK (ExpMonth IS NOT NULL)   ON MISMATCH DROP,
     CONSTRAINT expirationyear_chk  CHECK (ExpYear IS NOT NULL)    ON MISMATCH DROP
               )
             AS
         SELECT crd.CreditCardID,
                crd.CardNumber,
                crd.ExpMonth,
                crd.ExpYear,
                prs.FirstName,
                prs.LastName
           FROM adventureworks_bronze.creditcard        crd 
LEFT OUTER JOIN adventureworks_bronze.personcreditcard  pcc
             ON crd.CreditCardID = pcc.CreditCardID
LEFT OUTER JOIN adventureworks_bronze.person            prs 
             ON pcc.BusinessEntityID = prs.BusinessEntityID;   

				
			

In de Gold -laag wordt een geaggregeerde tabel opgezet. De tabel wordt eveneens aangemaakt als Materialized Lake View:

  • orderheaders combineert de brondata van de Sales Header met zowel Shipping- als Billing-adressen en creditcarddata (allemaal opgeslagen in MLV's in de Silver-laag).

Er worden constraints gedefinieerd om er zeker van te zijn dat zowel het Shipping- als het Billing-adres bestaan; is dat niet het geval, dan mogen de Sales Header-records niet in de MLV worden opgenomen, maar kan de uitvoering van de pijplijn doorgaan

Aanmaakscripts voor de MLV in de Gold-laag in Fabric:

				
					CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS adventureworks_gold.orderheaders
               (
     CONSTRAINT shiptoaddress_chk CHECK (Bill_To_AddressId IS NOT NULL) ON MISMATCH DROP,
     CONSTRAINT billtoaddress_chk CHECK (Ship_To_AddressId IS NOT NULL) ON MISMATCH DROP
               )
             AS
         SELECT soh.SalesOrderNumber,
                soh.OrderDate,
                soh.ShipDate,
                soh.DueDate,
                soh.Status,
                soh.SubTotal,
                soh.TaxAmt,
                soh.Freight,
                soh.TotalDue,
                bta.AddressID Bill_To_AddressId,
                bta.AddressLine1 Bill_To_AddressLine1,
                bta.AddressLine2 Bill_To_AddressLine2,
                bta.City Bill_To_City,
                bta.PostalCode Bill_To_PostalCode,
                bta.StateProvince Bill_To_StateProvince,
                bta.CountryRegion Bill_To_CountryRegion,
                sta.AddressID Ship_To_AddressId,
                sta.AddressLine1 Ship_To_AddressLine1,
                sta.AddressLine2 Ship_To_AddressLine2,
                sta.City Ship_To_City,
                sta.PostalCode Ship_To_PostalCode,
                sta.StateProvince Ship_To_StateProvince,
                sta.CountryRegion Ship_To_CountryRegion,
                crd.CardNumber,
                crd.ExpMonth,
                crd.ExpYear,
                crd.FirstName,
                crd.LastName
           FROM adventureworks_bronze.salesorderheader soh
LEFT OUTER JOIN adventureworks_silver.addresses        bta 
             ON soh.BillToAddressID = bta.AddressID
LEFT OUTER JOIN adventureworks_silver.addresses        sta 
             ON soh.ShipToAddressID = sta.AddressID   
LEFT OUTER JOIN adventureworks_silver.creditcards      crd 
             ON soh.CreditCardID = crd.CreditCardID;   

				
			

Opmerking: de attributen die door constraints worden gebruikt, moeten in de SELECT-statement worden gedefinieerd. In het bovenstaande voorbeeld worden zowel Bill To AddressId als Ship To AddressId alleen toegevoegd voor gebruik door de constraint; ze hebben geen business value. Verwijzen naar bta.AddressID of sta.AddressID in de constraints leidt echter tot een fout).

Zodra de MLV's zijn aangemaakt, wordt automatisch een Data Lineage View gegenereerd. Om deze view te openen, navigeer je naar het Lakehouse en selecteer je Managed Materialized Lake View:

MLV's zelf worden ook opgeslagen als Delta Tables en zijn als zodanig terug te vinden in de Tables-sectie van het Lakehouse.

Deze automatisch gegenereerde lineage kan als een pijplijn worden ingepland.

Let echter op:

  • Alleen MLV's worden vernieuwd. Het vernieuwen van data in de Delta Tables in de Bronze-laag moet in het bovenstaande voorbeeld op een andere manier gebeuren en kan niet in de automatisch gegenereerde pijplijn worden geïntegreerd. Hetzelfde geldt als bijvoorbeeld andere datatabellen in een van de lagen moeten worden gemanipuleerd.
  • Alle MLV's, zelfs als ze niet tot dezelfde data lineage behoren, maken deel uit van dezelfde Data Lineage View/pijplijn. Het bovenste deel van de hieronder getoonde data lineage is dat van de use case uit deze blog, het onderste deel is een andere use case. Beide delen geen enkel object met elkaar.

Selecteer Schedule in het navigatielint om de scheduling van de MLV-pijplijn aan te maken en/of te onderhouden:Het dropdownmenu linksboven toont de huidige en historische runs en moet worden gebruikt om de uitvoeringen van de pijplijn te monitoren/troubleshooten.

Klikken op een activiteit in het lineage-gedeelte van het scherm of op de activiteitenlijst onderaan het scherm toont meer details over uitvoering/fouten/enz.

Opmerkingen:

  • Alle MLV's zitten in dezelfde pijplijn (zie eerdere opmerking). Alle MLV's zonder inputafhankelijkheid van een andere MLV worden gelijktijdig gestart, en vanaf dat punt bepalen de afhankelijkheden het te volgen pad.
  • Er is geen spoor van gedropte records door datakwaliteitsconstraints terug te vinden op de activiteiten; ze worden beschouwd als voltooid, zonder enige waarschuwing of indicatie.

 

Scenario's

Voor de use case worden een aantal scenario's opgezet om de verschillende functionaliteiten van de MLV's te demonstreren.

De data die door Microsoft voor het AdventureWorks 2008 OLTP-schema worden aangeleverd, bevatten geen enkele afwijking van de gespecificeerde datakwaliteitsregels:

  • Alle OrderHeader-records hebben een Bill To AddressId en een Ship To AddressId.
  • Alle adressen kunnen worden gekoppeld aan een StateProvince Name en een CountryRegion Name.
  • Alle kredietkaarten kunnen worden gekoppeld aan een persoon.

Initiële datakwaliteitscontroles:

				
					SELECT COUNT(*)
           FROM adventureworks_bronze.salesorderheader soh;
             -- 31.465 Records

             -- All OrderHeader records have a Bill_To_AddressId and a Ship_To_AddressId
         SELECT COUNT(*)
           FROM adventureworks_bronze.salesorderheader soh
           JOIN adventureworks_bronze.address          bta 
             ON soh.BillToAddressID = bta.AddressID
           JOIN adventureworks_bronze.address          sta 
             ON soh.ShipToAddressID = sta.AddressID;  
             -- 31.465 Records

         SELECT COUNT(*)
           FROM adventureworks_bronze.address;
             -- 19.164 Records

             -- All Addresses can be linked to a StateProvince Name and a CountryRegion Name
         SELECT COUNT(*)
           FROM adventureworks_bronze.address          ad 
           JOIN adventureworks_bronze.stateprovince    sp 
             ON ad.StateProvinceID = sp.StateProvinceID
           JOIN adventureworks_bronze.countryregion    cr 
             ON sp.CountryRegionCode = cr.CountryRegionCode
          WHERE sp.Name IS NOT NULL
            AND cr.Name IS NOT NULL;
             -- 19.164 Records

         SELECT COUNT(*)
           FROM adventureworks_bronze.creditcard        cc
             -- 19.118 Records

             -- All Credit Cards can be linked to a Person
         SELECT COUNT(*)
           FROM adventureworks_bronze.creditcard        cc
           JOIN adventureworks_bronze.personcreditcard  pcc
             ON cc.CreditCardID = pcc.CreditCardID
           JOIN adventureworks_bronze.person            prs 
             ON pcc.BusinessEntityID = prs.BusinessEntityID
          WHERE prs.FirstName IS NOT NULL
            AND prs.LastName IS NOT NULL;
             -- 19.118 Records
   

				
			

Scenario 1

Dit is de Initial Load, zonder afwijkingen in de datakwaliteit (zie boven).

De MLV-schedule draait succesvol:

De sys_dq_metrics-tabel kan worden gebruikt om het aantal geladen records te monitoren. Ze verwijst naar datakwaliteitsmetrics op systeemniveau, die worden gebruikt om de kwaliteit van data in een database of datapijplijn te meten en te monitoren. Deze metrics helpen ervoor te zorgen dat data accuraat, volledig, consistent en betrouwbaar is voor de besluitvorming.

				
					SELECT top(100) 
                Namespace,
                MLVName,
                RefreshPolicy,
                RefreshTimestamp,
                Message,
                TotalRowsProcessed,
                TotalRowsDropped,
                TotalViolations,
                ViolationsPerConstraint
           FROM dbo.sys_dq_metrics
          WHERE MLVName in ('orderheaders','addresses','creditcards')
       ORDER BY RefreshTimestamp DESC; 

				
			

In deze tabel verwijzen de volgende records naar Scenario 1:

De Total Rows Processed voor elke MLV komt overeen met het aantal records in hun driving tables (salesorderheader, address en creditcard in de Bronze-laag).

Er werden geen rijen gedropt, er werden geen overtredingen gevonden.

Scenario 2

Zonder iets aan de inhoud van de Bronze-laag te wijzigen, wordt de MLV-schedule opnieuw gestart

De MLV-schedule draait succesvol:

In de sys_dq_metrics-tabel verwijzen de volgende records naar Scenario 2:

De Total Rows Processed voor elke MLV is 0. Er werden geen rijen gedropt, er werden geen overtredingen gevonden.

Het systeem detecteert dat er geen wijzigingen zijn aangebracht aan de brondata die door de MLV's wordt gebruikt. De RefreshPolicy isNoRefresh, en het bericht isGeen data-update in de brontabel waarvan de MLV afhangt, en dus werd er geen refresh uitgevoerd’.

Dit bewijst dat alleen de delen van de lineage die zijn gewijzigd, worden vernieuwd. Merk echter op dat er momenteel geen incrementele loads worden ondersteund; ofwel gebeurt er een full refresh van de MLV, ofwel geen refresh.

Scenario 3

We forceren een datakwaliteitsprobleem door een CountryRegionCode in de countryregion-tabel in de Bronze-laag bij te werken. Dit resulteert in een lege CountryRegion in de addresses-MLV in de Silver-laag, wat de constraint countryregion_chk in die MLV overtreedt.

De volgende Data Manipulation Language (DML) SQL-statement wordt uitgevoerd om het datakwaliteitsprobleem te forceren:

				
					UPDATE adventureworks_bronze.countryregion
            SET CountryRegionCode = 'FR_'
          WHERE CountryRegionCode = 'FR'; 

             -- Number of affected rows = 1

				
			
  • De MLV-schedule draait niet succesvol:

  • De creditcards-MLV draait succesvol;
  • De addresses-MLV faalt door de overtreding van de constraint countryregion_chk in die MLV, terwijl de ON MISMATCH-parameter voor deze constraint op FAIL staat. De error log toont:
  • De pijplijn stopt door de datakwaliteitsovertreding; de orderheaders-MLV draait niet


De sys_dq_metrics-tabel bevat geen records voor MLV's die faalden of niet draaiden, dus de enige entry voor Scenario 3 is:

Opmerking:
Falende constraints lijken tijdrovend te zijn. Tijdens mijn tests duurde de falende MLV addresses meer dan 5 minuten:

terwijl de initiële load (Scenario 1, 19.614 adressen laden) slechts 43 seconden duurde. Eerdere tests met dezelfde MLV toonden vergelijkbare resultaten (> 5 minuten bij constraintovertredingen):

 

Scenario 4

We lossen het CountryRegionCode-datakwaliteitsprobleem opnieuw op en forceren een ander datakwaliteitsprobleem door de Expiration Month in de creditcard-tabel in de Bronze-laag bij te werken (alle Expiration Months = 1 worden gewijzigd naar null). Dit resulteert in een lege ExpMonth in de creditcards-MLV in de Silver-laag, wat de constraint expirationmonth_chk in die MLV overtreedt.

De volgende Data Manipulation Language (DML) SQL-statements worden uitgevoerd om het datakwaliteitsprobleem te forceren:

				
					UPDATE adventureworks_bronze.countryregion
            SET CountryRegionCode = 'FR'
          WHERE CountryRegionCode = 'FR_'; 

             -- Number of affected rows = 1

         UPDATE adventureworks_bronze.creditcard
            SET ExpMonth = null
          WHERE ExpMonth = 1; ; 

             -- Number of affected rows = 1.613

				
			

De MLV-schedule draait succesvol:

De creditcards-MLV faalt niet door de overtreding van de constraint expirationmonth_chk in die MLV, terwijl de ON MISMATCH-parameter voor deze constraint op DROP staat. De enige plek waar je de gedropte records kunt zien, is de sys_dq_metrics-tabel. Ze bevat het aantal overtredingen / gedropte records en het aantal records per falende constraint voor Scenario 4:

  • Het aantal records in de MLV creditcards in de Silver-laag = 17.505 (namelijk 19.118 records in de brontabel creditcard van de Bronze-laag min 1.613 falende kredietkaarten (door een ontbrekende Expiration Month)).
  • De orderheaders-MLV mist geen enkele record; de SQL-code voor deze MLV bevat een Left Outer Join naar de creditcard-MLV, en er werden geen datakwaliteitsconstraints gedefinieerd in de orderheaders-MLV met betrekking tot kredietkaarten;
  • In tegenstelling tot de constraints met een ON MISMATCH-parameter FAIL, nemen de MLV's met een ON MISMATCH-parameter DROP blijkbaar weinig tot geen extra tijd in beslag


MLV Data Quality Reports

Op het lint van de materialized lake views-pagina is een Data quality report -knop te vinden.

Door op deze knop te drukken, wordt een automatisch gegenereerd data quality report geopend, met zowel een overzichtspagina als een detailpagina:

Terwijl de overzichtspagina alle data van alle MLV's samenvat, laat de detailpagina je focussen op één of meer MLV's.

Opmerking:
Deze rapporten houden GEEN rekening met de falende MLV-uitvoeringen door de ON MISMATCH-parameter op een MLV-constraint die op FAIL staat; ze focussen alleen op ON MISMATCH-parameters die op DROP staan. Dit betekent dat noch de Data Quality Reports, noch de sys_dq_metrics-tabel de impact van blokkerende datakwaliteitsproblemen zullen tonen!!!

OVER DE AUTEUR

Luc Busschots

Senior BI Consultant

Over Sparkle

Over Sparkle

Sparkle is een strategisch dataconsultancybedrijf, opgericht in 2017 en vandaag thuisbasis van 50+ consultants in België en Estland, dat zijn klanten helpt om hun data ten volle te benutten.

Meer over ons
Kom bij het team

Kom bij ons

Op zoek naar een carrière in data? Ontdek onze openstaande vacatures.

Werken bij Sparkle
Scroll naar boven