LakeFormation & Unity Catalog: Data Governance 2026

Gepubliceerd: 16 april 2026
Leestijd: 12 minuten
Data Engineering

Vergelijk AWS LakeFormation en Databricks Unity Catalog voor centrale data governance, fine-grained toegang en lineage in jouw data platform.

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.

1

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.

2

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.

3

Schema (database-niveau)

Traditionele database-namespace met tabellen, views en functies. Permissions worden geërfd vanuit het catalog-niveau maar kunnen ook overschreven worden.

4

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:

1

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.

2

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.

3

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.

4

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.

5

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