Data Governance in 2026: Waarom het Urgenter Is Dan Ooit
Data governance was lange tijd een onderwerp dat vooral compliance-officers bezighield. In 2026 is dat radicaal veranderd. Met de explosieve groei van data meshes, multi-cloud architecturen en steeds strengere regelgeving (GDPR, AI Act, NIS2) is governance een eerste-klas engineering-onderwerp geworden. Twee platforms domineren het debat: AWS Lake Formation en Databricks Unity Catalog.
Beide tools beloven hetzelfde: centrale controle over wie welke data mag zien, volledige lineage van bron tot dashboard, en fine-grained access control tot op rij- en kolomniveau. Maar ze doen dat op fundamenteel verschillende manieren, vanuit fundamenteel verschillende architectuurfilosofieën. In dit artikel duiken we diep in beide platforms, vergelijken we ze eerlijk, en geven we je concrete code en best practices om morgen mee aan de slag te gaan.
Kernbegrippen in dit artikel
- Data Governance: Het geheel van processen, beleid en technologie om de beschikbaarheid, bruikbaarheid, integriteit en veiligheid van data te waarborgen.
- Unity Catalog: De gecentraliseerde metadata- en governance-laag van Databricks, geïntroduceerd in 2022 en volledig volwassen in 2024–2026.
- AWS Lake Formation: Amazon's managed service voor data lake governance bovenop S3, Glue en Athena/Redshift.
- Data Lineage: Het bijhouden van de herkomst en transformaties van data: van bronbestand tot eindrapportage.
- Fine-Grained Access Control (FGAC): Toegangscontrole op rij- en/of kolomniveau, niet alleen op tabel- of databaseniveau.
Architectuur: Hoe Werken Ze?
Voordat we code schrijven, is het cruciaal om de onderliggende architectuur te begrijpen. Unity Catalog en Lake Formation zijn gebouwd vanuit verschillende paradigma's.
Unity Catalog: One Catalog to Rule Them All
Unity Catalog introduceert een drielaags naamruimtemodel: catalog.schema.table. Dit klinkt simpel, maar is een fundamentele breuk met het oude Hive Metastore-model waarbij iedere workspace zijn eigen geïsoleerde metastore had.
Metastore (account-niveau)
De root van Unity Catalog. Één metastore per regio, gedeeld over alle Databricks workspaces in dat account. Hier worden identities, audit logs en lineage opgeslagen.
Catalog (organisatie/domein-niveau)
Een logische container voor schema's. Je kunt catalogs per domein maken (bijv. finance, marketing, ops) — perfect voor een data mesh architectuur.
Schema (database-niveau)
Traditionele database-namespace met tabellen, views en functies. Permissions worden geërfd vanuit het catalog-niveau maar kunnen ook overschreven worden.
Table / View / Volume
Het laagste niveau. Delta tables zijn eerste-klas burgers; Unity Catalog ondersteunt ook externe tabellen op S3, ADLS en GCS via External Locations.
AWS Lake Formation: Governance als Laag bovenop AWS
Lake Formation werkt anders: het is geen nieuw opslag- of query-systeem, maar een governance-laag die bestaande AWS-diensten met elkaar verbindt. De centrale concepten zijn:
Data Catalog (Glue)
Lake Formation gebruikt AWS Glue Data Catalog als metadata-opslag. Databases en tabellen in Glue worden beheerd via Lake Formation-policies.
Lake Formation Permissions
Een eigen permission-model bovenop IAM. Je verleent rechten op database-, tabel-, kolom- of rijniveau via Lake Formation, onafhankelijk van S3 bucket policies.
LF-Tags (TBAC)
Tag-Based Access Control: je labelt data met tags (bijv. sensitivity=PII) en verleent rechten op tag-combinaties in plaats van individuele tabellen.
Praktische Codevoorbeelden
Unity Catalog: Tabellen aanmaken en rechten beheren
Het volgende voorbeeld toont een typische setup voor een finance-domein in een data mesh architectuur:
-- Stap 1: Catalog en schema aanmaken (uitgevoerd door Account Admin)
CREATE CATALOG IF NOT EXISTS finance
COMMENT 'Finance domein catalog - eigenaar: Finance Engineering Team';
CREATE SCHEMA IF NOT EXISTS finance.reporting
COMMENT 'Gerapporteerde KPIs voor management dashboards'
MANAGED LOCATION 's3://company-datalake/finance/reporting/';
-- Stap 2: Delta table met kolomgevoeligheid
CREATE TABLE IF NOT EXISTS finance.reporting.transactions (
transaction_id STRING NOT NULL,
customer_id STRING, -- PII kolom
amount DECIMAL(18, 2),
currency STRING,
transaction_ts TIMESTAMP,
country_code STRING
)
USING DELTA
TBLPROPERTIES (
'delta.enableChangeDataFeed' = 'true',
'sensitivity' = 'confidential'
);
-- Stap 3: Tag kolom als PII (Column Tags - GA in 2024)
ALTER TABLE finance.reporting.transactions
ALTER COLUMN customer_id
SET TAGS ('pii' = 'true', 'gdpr_relevant' = 'true');
-- Stap 4: Fine-grained access - analisten zien geen customer_id
CREATE VIEW finance.reporting.transactions_masked AS
SELECT
transaction_id,
CASE
WHEN is_member('finance_analysts') THEN '***MASKED***'
ELSE customer_id
END AS customer_id,
amount,
currency,
transaction_ts,
country_code
FROM finance.reporting.transactions;
-- Stap 5: Row-level security via dynamic views
CREATE VIEW finance.reporting.transactions_by_country AS
SELECT * FROM finance.reporting.transactions
WHERE country_code IN (
SELECT allowed_country
FROM finance.security.user_country_access
WHERE user_email = current_user()
);
-- Stap 6: Rechten verlenen
GRANT USE CATALOG ON CATALOG finance TO `finance-team@company.com`;
GRANT USE SCHEMA ON SCHEMA finance.reporting TO `finance-team@company.com`;
GRANT SELECT ON TABLE finance.reporting.transactions_masked
TO `finance_analysts`;
GRANT SELECT, MODIFY ON TABLE finance.reporting.transactions
TO `finance_engineers`;
Unity Catalog: Data Lineage via Python API
Unity Catalog registreert automatisch lineage voor Spark-jobs die draaien op Databricks clusters. Je kunt deze lineage ook programmatisch opvragen:
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import LineageDirection
w = WorkspaceClient()
# Ophalen van upstream lineage voor een specifieke tabel
lineage = w.table_lineage.list(
table_name="finance.reporting.transactions",
direction=LineageDirection.UPSTREAM,
max_results=50
)
for node in lineage:
print(f"Type: {node.entity_type}")
print(f"Naam: {node.entity_name}")
print(f"Job ID: {node.job_id}")
print(f"Notebook Path: {node.notebook_path}")
print("---")
# Kolom-level lineage (Column Lineage)
col_lineage = w.column_lineage.list(
table_name="finance.reporting.transactions",
column_name="amount"
)
for link in col_lineage.upstream_cols:
print(f" ← {link.table_name}.{link.name} (via {link.transform_type})")
AWS Lake Formation: Tag-Based Access Control
Het volgende Boto3-voorbeeld implementeert TBAC voor een vergelijkbaar finance-scenario:
import boto3
lf_client = boto3.client('lakeformation', region_name='eu-west-1')
glue_client = boto3.client('glue', region_name='eu-west-1')
# Stap 1: LF-Tags aanmaken
tags_to_create = [
{'TagKey': 'sensitivity', 'TagValues': ['public', 'internal', 'confidential', 'restricted']},
{'TagKey': 'gdpr_relevant', 'TagValues': ['true', 'false']},
{'TagKey': 'data_domain', 'TagValues': ['finance', 'marketing', 'hr', 'ops']},
]
for tag in tags_to_create:
try:
lf_client.create_lf_tag(**tag)
print(f"Tag aangemaakt: {tag['TagKey']}")
except lf_client.exceptions.AlreadyExistsException:
print(f"Tag bestaat al: {tag['TagKey']}")
# Stap 2: Tags toewijzen aan tabel en kolommen
lf_client.add_lf_tags_to_resource(
Resource={
'Table': {
'DatabaseName': 'finance_reporting',
'Name': 'transactions'
}
},
LFTags=[
{'TagKey': 'sensitivity', 'TagValues': ['confidential']},
{'TagKey': 'data_domain', 'TagValues': ['finance']},
]
)
# PII-tag op kolomniveau
lf_client.add_lf_tags_to_resource(
Resource={
'TableWithColumns': {
'DatabaseName': 'finance_reporting',
'Name': 'transactions',
'ColumnNames': ['customer_id', 'iban']
}
},
LFTags=[
{'TagKey': 'gdpr_relevant', 'TagValues': ['true']},
]
)
# Stap 3: Rechten verlenen op basis van tags
# Finance analisten mogen confidential data zien, BEHALVE gdpr_relevant kolommen
lf_client.grant_permissions(
Principal={'DataLakePrincipalIdentifier': 'arn:aws:iam::123456789:role/FinanceAnalystsRole'},
Resource={
'LFTagPolicy': {
'ResourceType': 'TABLE',
'Expression': [
{'TagKey': 'sensitivity', 'TagValues': ['internal', 'confidential']},
{'TagKey': 'data_domain', 'TagValues': ['finance']},
]
}
},
Permissions=['SELECT'],
PermissionsWithGrantOption=[]
)
# Stap 4: Data Filters voor row-level security
lf_client.create_data_cells_filter(
TableData={
'TableCatalogId': '123456789012',
'DatabaseName': 'finance_reporting',
'TableName': 'transactions',
'Name': 'nl_transactions_only',
'RowFilter': {
'FilterExpression': "country_code = 'NL'"
},
'ColumnWildcard': {
'ExcludedColumnNames': ['customer_id', 'iban']
}
}
)
print("Lake Formation governance configuratie voltooid!")
Pro Tip: Terraform voor Reproduceerbare Governance
Codeer je governance-configuratie altijd als Infrastructure as Code. Zowel Unity Catalog als Lake Formation hebben uitstekende Terraform-providers. Dit voorkomt configuratiedrift en maakt peer review van access control changes mogelijk via pull requests — net zoals je doet met applicatiecode.
Vergelijking: Unity Catalog vs Lake Formation vs Alternatieven
| Feature | Unity Catalog | AWS Lake Formation | Apache Atlas | Collibra |
|---|---|---|---|---|
| Fine-grained access (rij/kolom) | ✅ Native (dynamic views + row filters) | ✅ Native (data cell filters) | ⚠️ Beperkt (plugin-afhankelijk) | ✅ Via integraties |
| Automatische Data Lineage | ✅ Automatisch (Spark, SQL, notebooks) | ⚠️ Gedeeltelijk (via Glue jobs) | ✅ Automatisch (Spark, Kafka, Hive) | ✅ Via connectors |
| Multi-cloud ondersteuning | ✅ AWS, Azure, GCP | ❌ AWS only | ✅ Platform-agnostisch | ✅ Platform-agnostisch |
| Data Mesh ondersteuning | ✅ Catalogs per domein | ⚠️ Via cross-account sharing | ⚠️ Handmatige inrichting | ✅ Business glossary + domains |
| Tag-based access control | ✅ Column Tags + Attribute-based | ✅ LF-Tags (TBAC) | ⚠️ Beperkt | ✅ Business glossary-based |
| Open Table Format support | ✅ Delta Lake (native), Iceberg, Hudi | ✅ Iceberg (native), Delta, Hudi | ✅ Via Hive Metastore | ⚠️ Metadata only |
| Kostenmodel | Inbegrepen in Databricks DBU | Gratis service (betaal voor onderliggende compute) | Open source (eigen infra) | Enterprise licentie (€€€) |
| AI/ML governance | ✅ MLflow models, feature store | ⚠️ Via SageMaker integratie | ❌ Niet native | ⚠️ Via integraties |
Nieuw in 2025–2026: Unity Catalog Open Source
In 2024 maakte Databricks Unity Catalog open source via het unitycatalog.io project. Dit betekent dat je de catalog-laag nu ook kunt draaien op eigen infrastructuur of op andere cloud providers, los van het Databricks platform. Dit vergroot de adoptie enorm en maakt Unity Catalog een serieuze concurrent voor Apache Iceberg's REST Catalog en Gravitino.
Data Mesh Implementatie: Best Practices
Data mesh en governance zijn onlosmakelijk verbonden. Een data mesh zonder governance is anarchie; governance zonder mesh-principes is een bottleneck. Hier zijn de meest kritieke lessen uit productiemplementaties:
Definieer je Governance Model Voordat je Tools Kiest
Bepaal eerst: wie zijn je data owners, welke classificatieniveaus gebruik je (public/internal/confidential/restricted), en wat zijn je compliance-vereisten (GDPR, NEN 7510, SOC2)? De toolkeuze volgt het model — niet andersom.
Gebruik Tag-Based Access Control van Dag Één
In Lake Formation: gebruik LF-Tags consequent en wijs nooit directe table-level permissions toe aan individuele gebruikers. In Unity Catalog: gebruik Attribute-based access control (ABAC) via kolom-tags. Dit schaalt exponentieel beter dan per-tabel ACLs wanneer je data estate groeit.
Automatiseer Data Classification met ML
Schrijf een classificatiepipeline die nieuwe kolommen automatisch scant op PII-patronen (BSN, IBAN, e-mailadressen) en de juiste tags toepast. Zowel AWS Macie als Databricks kunnen hier worden ingezet. Menselijke review blijft nodig voor edge cases, maar automatisering bespaart 80% van het handmatige werk.
Versie-beheer je Governance Policies
Sla alle governance-configuraties op in Git (Terraform, YAML, of SQL-scripts). Gebruik pull requests voor access-changes. Dit creëert een audit trail van governance-beslissingen en maakt rollback mogelijk.
Monitor Access Patterns Proactief
Schakel CloudTrail (Lake Formation) of Unity Catalog System Tables in en bouw dashboards die abnormale access patterns detecteren. Een analist die plotseling 10 miljoen rijen opvraagt waar normaal 10.000 volstaan, verdient een alert.
Monitoring met Unity Catalog System Tables
-- Unity Catalog System Tables: audit log analyse
-- Beschikbaar via catalog: system.access.audit
-- Top 10 gebruikers op basis van data access volume (afgelopen 30 dagen)
SELECT
user_identity.email AS user_email,
request_params['full_name_arg'] AS table_accessed,
COUNT(*) AS access_count,
COUNT(DISTINCT DATE(event_time)) AS active_days,
MAX(event_time) AS last_access
FROM system.access.audit
WHERE
action_name IN ('commandSubmit', 'selectFromTable')
AND event_time >= DATEADD(DAY, -30, CURRENT_TIMESTAMP())
AND response.status_code = 200
GROUP BY 1, 2
ORDER BY access_count DESC
LIMIT 10;
-- Detecteer potentiële data exfiltratie: grote queries buiten kantooruren
SELECT
user_identity.email AS user_email,
request_params['full_name_arg'] AS table_name,
response.result['num_rows_affected'] AS rows_returned,
event_time,
source_ip_address
FROM system.access.audit
WHERE
action_name = 'selectFromTable'
AND HOUR(event_time) NOT BETWEEN 7 AND 19 -- buiten kantooruren
AND CAST(response.result['num_rows_affected'] AS BIGINT) > 100000
AND event_time >= DATEADD(DAY, -7, CURRENT_TIMESTAMP())
ORDER BY rows_returned DESC;
-- Kolom-level access tracking voor PII compliance
SELECT
user_identity.email AS user_email,
request_params['table_name'] AS table_name,
request_params['column_name'] AS column_name,
COUNT(*) AS access_count,
MIN(event_time) AS first_access,
MAX(event_time) AS last_access
FROM system.access.column_access
WHERE
request_params['column_name'] IN (
SELECT column_name
FROM system.information_schema.column_tags
WHERE tag_name = 'pii' AND tag_value = 'true'
)
AND event_time >= DATEADD(MONTH, -3, CURRENT_TIMESTAMP())
GROUP BY 1, 2, 3
ORDER BY access_count DESC;
Praktijkcase: Nederlandse Financiële Instelling
Een Nederlandse bank met 15 data domeinen (payments, risk, compliance, retail, etc.) migreerde van een centraal Hive Metastore naar Unity Catalog in Q1 2025. Uitdagingen en oplossingen:
- Uitdaging: 2.400 bestaande tabellen zonder consistente naamgeving of eigenaarschap.
Oplossing: Automated Catalog Migration Tool gecombineerd met een 6-weken Data Stewardship Sprint per domein. - Uitdaging: 180 legacy notebooks met directe S3-paden in plaats van catalog-referenties.
Oplossing: Unity Catalog Compatibility Mode activeren + geautomatiseerde path-to-table-naam rewriting via AST-analyse. - Resultaat: Van 6 weken gemiddelde doorlooptijd voor access requests naar 2 uur via self-service portaal. GDPR audit voorbereidingstijd gedaald van 3 weken naar 4 uur.
AI Governance: De Nieuwe Frontier
In 2026 is data governance uitgebreid naar AI governance. Unity Catalog speelt hier een sleutelrol: ML-modellen, feature stores en AI-assets zijn nu first-class citizens in de catalog.
Model Governance
MLflow modellen geregistreerd in Unity Catalog krijgen automatisch lineage naar de trainingsdata. Je kunt exact zien welke data welk model heeft getraind — cruciaal voor EU AI Act compliance.
Feature Store Lineage
Databricks Feature Store integreert naadloos met Unity Catalog. Elke feature heeft automatisch lineage naar de brondata, inclusief de transformatiecode die de feature berekent.
EU AI Act Ready
Unity Catalog genereert automatisch de vereiste documentatie voor high-risk AI-systemen: trainingsdata herkomst, data kwaliteitsmetrics, en bias-assessment rapporten.
Conclusie: Wanneer Kies Je Wat?
Na deze diepgaande analyse is de keuze eigenlijk verrassend helder, mits je eerlijk bent over je situatie:
| Scenario | Beste Keuze | Reden |
|---|---|---|
| Primair Databricks-gebruiker, multi-cloud | Unity Catalog | Naadloze integratie, superieure lineage, AI governance |
| Pure AWS-stack, geen Databricks | Lake Formation | Native integratie met Athena, Redshift, EMR, gratis service |
| On-premise + cloud hybrid | Apache Atlas / Open UC | Platform-agnostisch, geen vendor lock-in |
| Enterprise, business glossary cruciaal | Collibra + UC/LF | Business-vriendelijke UI, combineert met technische tools |
| Data mesh, meerdere teams/domeinen | Unity Catalog | Catalog-per-domein model is perfect voor federated governance |
| Hoge compliance-eisen (NEN 7510, SOC2) | Beide | Beide bieden voldoende audit logging; keuze afhankelijk van cloud-strategie |
Eindadvies voor 2026
Start vandaag, niet morgen. De meeste organisaties onderschatten hoeveel technische schuld zich opstapelt door gebrekkige governance. Elke dag zonder gestandaardiseerde access control is een dag dichter bij een datalek of compliance-incident.
Kies Unity Catalog als je al Databricks gebruikt — de toegevoegde waarde is enorm en de migratietijd is beheersbaar. Kies Lake Formation als je een pure AWS-shop bent en maximale kostenefficiëntie wilt. Maar maak wél een keuze, en borg die keuze als code.
De organisaties die