Snowflake in 2026: architectuur, SQL en sollicitatievragen voor data engineers

Een gids voor 2026 over de Snowflake-architectuur voor data engineers: hoe storage en compute scheiden, hoe virtual warehouses en micro-partitions werken, en de sollicitatievragen die productie-ervaring toetsen.

Diagram van de Snowflake-architectuur met de lagen storage, virtual warehouse-compute en cloud services

Snowflake-sollicitatievragen toetsen of een data engineer de ontkoppelde architectuur van het platform begrijpt, niet alleen de SQL-syntax. Het multi-cluster shared-data-ontwerp dat Snowflake introduceerde, scheidt storage, compute en services in drie onafhankelijke lagen, en die scheiding verklaart vrijwel elke beslissing over performance en kosten die een team op het platform neemt. Deze gids behandelt de Snowflake-architectuur, de SQL-patronen die queries snel en goedkoop houden in 2026, en de sollicitatievragen die echte productie-ervaring blootleggen.

De drie lagen van Snowflake in één zin

Snowflake splitst een datawarehouse op in drie onafhankelijke lagen: gecentraliseerde storage die gecomprimeerde columnaire data bevat, virtual warehouses die elastische compute leveren, en een cloud services-laag die metadata, security en query-optimalisatie afhandelt. Elke laag schaalt zonder de andere te beïnvloeden.

Snowflake-architectuur: storage, compute en cloud services

Het bepalende kenmerk van de Snowflake-architectuur is dat storage en compute fysiek gescheiden zijn. Data staat één keer opgeslagen in een gecentraliseerde storage-laag die draait op cloud object stores zoals Amazon S3 of Azure Blob Storage. Een willekeurig aantal compute-clusters kan diezelfde data gelijktijdig lezen zonder deze te kopiëren, een aanpak die het oorspronkelijke engineeringteam multi-cluster shared data noemde in de SIGMOD-paper uit 2016 die het ontwerp introduceerde.

De storage-laag bewaart data in onveranderlijke, gecomprimeerde, columnaire bestanden die micro-partitions heten. Een gebruiker beheert deze bestanden nooit rechtstreeks. Snowflake schrijft ze weg, houdt hun metadata bij en ruimt ze op. De compute-laag bestaat uit virtual warehouses, elk een cluster van servers dat Snowflake on demand provisioned. De cloud services-laag ligt boven beide en coördineert alles: die parset SQL, plant queries, dwingt access control af, beheert transacties en bewaart de metadata die features zoals Time Travel en zero-copy cloning mogelijk maken.

Omdat deze lagen onafhankelijk zijn, kan een warehouse worden geresized of gedropt zonder een enkele byte data aan te raken, en kan storage doorgroeien tot petabytes zonder enige compute te provisionen.

sql
-- setup_warehouse.sql
-- Create an isolated compute cluster and a database.
CREATE WAREHOUSE analytics_wh
  WAREHOUSE_SIZE = 'MEDIUM'      -- 4 credits/hour, doubles each size step
  AUTO_SUSPEND = 60             -- suspend after 60s idle to stop billing
  AUTO_RESUME = TRUE            -- resume automatically on the next query
  INITIALLY_SUSPENDED = TRUE;

CREATE DATABASE sales_analytics;
USE WAREHOUSE analytics_wh;
USE DATABASE sales_analytics;

-- Storage and compute are independent: dropping the warehouse
-- leaves every table in sales_analytics untouched.

Het droppen van analytics_wh nadat dat script is uitgevoerd, zou alle compute-facturering stopzetten terwijl elke tabel opvraagbaar blijft zodra een nieuw warehouse wordt aangemaakt. Die ontkoppeling is het allerbelangrijkste idee om in een sollicitatiegesprek te kunnen verwoorden.

Hoe virtual warehouses de compute van Snowflake schalen

Een virtual warehouse is een benoemd compute-cluster met een omvang in T-shirtmaten: X-Small, Small, Medium, Large en groter. Elke stap omhoog verdubbelt zowel het aantal servers als het creditverbruik per uur, dus een Large warehouse kost vier keer zoveel als een Small, maar rondt een scan-intensieve query ook ongeveer vier keer sneller af. Deze lineaire afweging tussen prijs en performance betekent dat de goedkoopste optie vaak een groter warehouse is dat korter draait.

Er bestaan twee schaaldimensies, en die verwarren is een veelvoorkomende valkuil in sollicitatiegesprekken. Verticaal schalen resized een enkel warehouse om één query sneller te maken. Horizontaal schalen voegt clusters toe aan een multi-cluster warehouse om meer gelijktijdige queries te bedienen. Een dashboard dat om 9 uur 's ochtends door 200 analisten wordt bevraagd, heeft meer clusters nodig, geen groter warehouse; een nachtelijke backfill van een biljoen rijen heeft een groter warehouse nodig, geen extra clusters.

Verticaal versus horizontaal schalen

Resize een warehouse (verticaal) om een enkele trage query te versnellen die veel data scant. Voeg clusters toe (horizontaal) aan een multi-cluster warehouse wanneer veel gebruikers tegelijk queries draaien en verzoeken in de wachtrij belanden. Het ene lost latency op voor een zware taak; het andere lost concurrency op voor veel kleine taken.

sql
-- scale_compute.sql
-- Multi-cluster warehouse: add clusters when concurrency rises and
-- remove them when demand falls. Each cluster is a separate MEDIUM engine.
ALTER WAREHOUSE analytics_wh SET
  MIN_CLUSTER_COUNT = 1
  MAX_CLUSTER_COUNT = 4          -- up to 4 clusters during peak load
  SCALING_POLICY = 'STANDARD';   -- favor performance over credit savings

-- Resize vertically for one heavy job, then shrink back afterward.
ALTER WAREHOUSE analytics_wh SET WAREHOUSE_SIZE = 'XLARGE';
-- ... run the heavy backfill ...
ALTER WAREHOUSE analytics_wh SET WAREHOUSE_SIZE = 'MEDIUM';

AUTO_SUSPEND en AUTO_RESUME maken dit economisch haalbaar. Een opgeschort warehouse kost niets, en Snowflake factureert per seconde met een minimum van 60 seconden. Een korte auto-suspend instellen op interactieve warehouses voorkomt dat inactieve clusters credits verstoken tussen queries door.

Micro-partitions en clustering keys voor snelle SQL

Snowflake slaat elke tabel op als een verzameling micro-partitions, die elk 50 tot 500 MB aan ongecomprimeerde data in columnair formaat bevatten. Voor elke micro-partition legt Snowflake de minimum- en maximumwaarde van elke kolom vast in de metadata. Wanneer een query op een kolom filtert, leest de optimizer die metadata en slaat elke partition over waarvan het waardebereik onmogelijk kan matchen, een proces dat partition pruning heet. Daarom heeft Snowflake geen handmatige indexes nodig: pruning gebeurt automatisch op elke kolom.

Pruning werkt het best wanneer de filterkolom correleert met de volgorde waarin data werd ingeladen. Een tabel die per datum wordt geïngest, prunet datumbereik-queries efficiënt. Wanneer een grote tabel vaak wordt gefilterd op een kolom die losstaat van de laadvolgorde, plaatst een clustering key gerelateerde rijen bij elkaar over micro-partitions heen, zodat pruning effectief blijft naarmate de tabel groeit.

sql
-- clustering.sql
-- Filters on naturally ordered columns prune partitions with no index.
SELECT order_date, SUM(amount_usd) AS revenue
FROM orders
WHERE order_date BETWEEN '2026-01-01' AND '2026-03-31'
GROUP BY order_date;

-- For a multi-terabyte table queried by a non-load-order column,
-- a clustering key co-locates related rows to keep pruning effective.
ALTER TABLE orders CLUSTER BY (customer_region, order_date);

-- Inspect clustering depth before committing to a key.
SELECT SYSTEM$CLUSTERING_INFORMATION('orders', '(customer_region, order_date)');

Clustering keys zijn niet gratis: Snowflake draait een automatische achtergrondservice om ze te onderhouden, en die service verbruikt credits. De vuistregel is om alleen een clustering key toe te voegen aan tabellen in de terabytegrootte waar query-profielen slechte pruning laten zien. Kleinere tabellen prunen zelf al goed, en een voortijdige clustering key verspilt geld. Die afweging uitleggen maakt vaak het verschil tussen een junior- en een seniorantwoord.

Clustering kan meer kosten dan het oplevert

Op een tabel met veel inserts en updates herorganiseert de automatische reclustering-service micro-partitions continu om de clustering key aan te houden, en dat onderhoud kan meer credits verstoken dan de queries die het versnelt. Meet eerst de query-workload met het query-profiel, en reserveer clustering voor tabellen die veel vaker worden gelezen dan geschreven.

Data laden en transformeren: Snowpipe, Streams en Dynamic Tables

Drie ingestiepatronen dekken de meeste workloads. Bulk COPY INTO laadt gestagede bestanden in één commando en past bij geplande batchtaken. Snowpipe laadt bestanden continu in serverless micro-batches, getriggerd door cloud storage-events, voor bijna-realtime aankomst. Snowpipe Streaming duwt individuele rijen door een low-latency API wanneer versheid onder de seconde ertoe doet. Kiezen tussen deze opties op basis van latency- en bestandsgrootte-eisen is een frequente sollicitatievraag, en het juiste antwoord begint met "het hangt af van de versheid die de downstream consumer daadwerkelijk nodig heeft."

Transformatie binnen het warehouse leunde historisch op Streams en Tasks. Een Stream legt wijzigingen op rijniveau op een tabel vast (change data capture), en een Task draait SQL volgens een schema om die wijzigingen te consumeren en downstream samen te voegen.

sql
-- incremental_pipeline.sql
-- A stream tracks row-level changes (CDC) on the raw landing table.
CREATE STREAM orders_stream ON TABLE raw_orders;

-- A task consumes the stream on a schedule and merges changes downstream.
CREATE TASK refresh_orders
  WAREHOUSE = analytics_wh
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA('orders_stream')
AS
  MERGE INTO orders t
  USING orders_stream s ON t.order_id = s.order_id
  WHEN MATCHED THEN UPDATE SET t.amount_usd = s.amount_usd
  WHEN NOT MATCHED THEN INSERT (order_id, amount_usd)
    VALUES (s.order_id, s.amount_usd);

In 2026 zijn Dynamic Tables de voorkeursmanier geworden om incrementele transformaties uit te drukken. In plaats van een Stream aan een Task te koppelen en de merge met de hand te schrijven, declareert een Dynamic Table een target lag en een query, en berekent Snowflake de incrementele refresh automatisch. Dat verwijdert het merendeel van de orchestratie-boilerplate terwijl de resultaten vers blijven.

sql
-- dynamic_table.sql
-- Dynamic Tables replace the stream + task pattern with a declarative
-- target lag. Snowflake computes the incremental refresh automatically.
CREATE DYNAMIC TABLE daily_revenue
  TARGET_LAG = '5 minutes'
  WAREHOUSE = analytics_wh
AS
  SELECT order_date, SUM(amount_usd) AS revenue
  FROM orders
  GROUP BY order_date;

Voor teams die op open formaten bouwen, laten de Iceberg-tabellen van Snowflake het warehouse Apache Iceberg-data lezen en schrijven die in de eigen cloud-bucket van een klant staat, wat lock-in vermijdt terwijl de query-engine en governance van Snowflake behouden blijven. Veel teams combineren Snowflake met dbt voor versiebeheerde, geteste transformaties, een workflow die wordt behandeld in de gids over dbt-datatransformaties en testing.

Klaar om je Data Engineering gesprekken te halen?

Oefen met onze interactieve simulatoren, flashcards en technische tests.

Snowflake-sollicitatievragen voor data engineers

De onderstaande vragen komen keer op keer terug in Snowflake-sollicitatiegesprekken voor data engineering. Sterke antwoorden koppelen een feature terug aan de scheiding van storage en compute in plaats van syntax op te dreunen.

Welk probleem lost het scheiden van storage en compute op? Het elimineert contentie. Analisten die dashboards draaien, een data science-team dat features traint en een ELT-taak die data laadt, kunnen elk op hun eigen warehouse tegen dezelfde tabellen draaien zonder om resources te concurreren of data te kopiëren. Compute schaalt op voor een zware taak en schort zichzelf op wanneer die inactief is, terwijl de storagekosten gelijk blijven, ongeacht hoeveel compute eraan gekoppeld is.

Hoe werken Time Travel en zero-copy cloning? Beide steunen op de onveranderlijkheid van micro-partitions. Omdat Snowflake een micro-partition nooit overschrijft, blijven oudere versies op schijf staan gedurende het retentievenster (tot 90 dagen op Enterprise). Time Travel bevraagt een tabel zoals die op een tijdstip in het verleden was door naar die oudere partitions te wijzen, en CLONE maakt een nieuwe tabel die naar dezelfde partitions verwijst zonder de storage te dupliceren totdat een van beide kanten wordt gewijzigd. Copy-on-write is wat een kloon van een petabyte-tabel onmiddellijk en vrijwel gratis maakt.

Wanneer moet een clustering key worden gedefinieerd? Alleen op grote tabellen (grofweg een terabyte of meer) die vaak worden gefilterd of gejoind op een kolom die losstaat van hun laadvolgorde, en pas nadat een query-profiel slechte pruning bevestigt. Clustering brengt doorlopende onderhoudscredits met zich mee, dus het is een bewuste optimalisatie, geen standaardkeuze.

Hoe worden de kosten van Snowflake beheerst? Via warehouse-sizing, agressieve auto-suspend, het cluster-aantal afstemmen op echte concurrency, en resource monitors die het creditverbruik begrenzen. Een resource monitor kan warehouses automatisch waarschuwen of opschorten zodra een quota is bereikt.

sql
-- cost_control.sql
-- A resource monitor caps credit spend and suspends warehouses
-- automatically when the monthly quota is reached.
CREATE RESOURCE MONITOR monthly_cap
  WITH CREDIT_QUOTA = 1000
  FREQUENCY = MONTHLY
  START_TIMESTAMP = IMMEDIATELY
  TRIGGERS
    ON 80 PERCENT DO NOTIFY
    ON 100 PERCENT DO SUSPEND;

ALTER WAREHOUSE analytics_wh SET RESOURCE_MONITOR = monthly_cap;

Streams en Tasks of Dynamic Tables? Dynamic Tables passen bij declaratieve pipelines waar een doelversheid de eis is en Snowflake de refresh kan beheren. Streams en Tasks blijven het juiste gereedschap wanneer de transformatie imperatieve controle, side effects of logica vereist die één enkele query niet kan uitdrukken. Weten waar elk past, in plaats van standaard voor één te kiezen, wijst op productie-ervaring.

Hoe verschilt ELT op Snowflake van traditionele ETL? De goedkope storage en elastische compute van Snowflake maken het praktisch om ruwe data eerst te laden en die vervolgens ter plekke te transformeren, het patroon dat wordt behandeld in de gids over ETL versus ELT-architectuur. Kandidaten die zich op de volledige cyclus voorbereiden, kunnen de module over ETL- en ELT-patronen oefenen naast het bredere data-engineeringtraject.

Conclusie

  • De Snowflake-architectuur scheidt storage, compute en cloud services in drie onafhankelijke lagen, en vrijwel elk ontwerpantwoord is terug te voeren op die scheiding
  • Virtual warehouses schalen verticaal voor zwaardere enkele queries en horizontaal voor hogere concurrency; auto-suspend en facturering per seconde houden inactieve compute gratis
  • Micro-partitions met per kolom min/max-metadata leveren automatische partition pruning, en daarom heeft Snowflake geen handmatige indexes nodig
  • Voeg clustering keys alleen toe aan tabellen op terabyteschaal met bewezen slechte pruning, aangezien onderhoud credits verbruikt
  • Stem het ingestiepatroon af op de vereiste versheid: bulk COPY voor batch, Snowpipe voor continue micro-batches, Snowpipe Streaming voor latency onder de seconde
  • Geef in 2026 de voorkeur aan Dynamic Tables voor declaratieve incrementele transformaties, en reserveer Streams en Tasks voor imperatieve logica
  • Time Travel en zero-copy cloning benutten beide de onveranderlijkheid van micro-partitions en copy-on-write, waardoor point-in-time-queries en directe klonen goedkoop zijn
  • Beheers kosten met correct geschaalde warehouses, agressieve auto-suspend, op concurrency afgestemde clusters en resource monitors

Begin met oefenen!

Test je kennis met onze gespreksimulatoren en technische tests.

Tags

#snowflake
#data-engineering
#data-warehouse
#sql
#snowflake-architecture
#dynamic-tables

Delen

Gerelateerde artikelen