Amazon Redshift: Complete Gids 2025
Van provisioned clusters tot volledig serverless — alles wat je moet weten over Amazon Redshift in 2025. Inclusief architectuur, SQL-patronen, pricing breakdown en een eerlijke vergelijking met BigQuery en Snowflake.
AWS Redshift Expert zoeken?
Vind ervaren data engineers en Redshift-architects voor jouw cloud data warehouse implementatie.
Inhoudsopgave
- Wat is Amazon Redshift?
- Serverless vs Provisioned
- Architectuur: MPP, Columnar & Data Lake
- Node Types: RA3, DC2 en Serverless RPU
- SQL-patronen en Distributiestrategieën
- Redshift Spectrum — Data Lake Integratie
- Redshift ML met Amazon SageMaker
- Vergelijking: Redshift vs BigQuery vs Snowflake
- Pricing Breakdown 2025
- Best Practices & Performance Tuning
- Aan de Slag in 15 Minuten
- Veelgestelde Vragen
1. Wat is Amazon Redshift?
Definitie
Amazon Redshift is een volledig beheerde, cloud-native data warehouse service van AWS. Het combineert columnar storage, Massively Parallel Processing (MPP) en geïntegreerde machine learning voor analytische queries over petabytes aan data. Redshift is marktleider in cloud data warehousing met meer dan 10.000 enterprise klanten wereldwijd.
10x Sneller
Columnar storage + MPP geeft tot 10× betere prijs-prestatieverhouding versus traditionele data warehouses
Petabyte Scale
Schaalbaar van gigabytes tot exabytes via RA3 managed storage of Redshift Serverless
ML Ingebouwd
Redshift ML traint SageMaker-modellen direct via SQL CREATE MODEL statements
AWS Ecosystem
Native integratie met S3, Glue, Kinesis, Lake Formation, QuickSight en 170+ AWS services
2. Serverless vs Provisioned
Het eerste beslismoment bij Redshift: kies je voor een provisioned cluster (vaste capaciteit, voorspelbare prijs) of Redshift Serverless (automatisch schalen, betalen per gebruik)?
| Criterium | Provisioned Cluster | Redshift Serverless |
|---|---|---|
| Beheer | Cluster inrichten, nodes kiezen, onderhoud | Nul infrastructuurbeheer |
| Schaalbaarheid | Handmatig resize of elastic resize | Automatisch (0 → max RPUs) |
| Kosten model | Per uur (ook als cluster stilstaat) | Per RPU per seconde (alleen bij gebruik) |
| Cold start | Geen (altijd aan) | ~10–30 sec bij eerste query |
| Beste voor | Continue, voorspelbare workloads (>8 uur/dag) | Variabele, bursty of dev/test workloads |
| Reserved pricing | Ja, tot 75% korting | Nee |
| VPC integratie | Volledig | Volledig |
Vuistregel
Gebruik Serverless voor dev/test omgevingen, BI dashboards met onregelmatige gebruik en startende projecten. Kies Provisioned + Reserved Instances zodra je >8 uur per dag actief bent — dat is aanzienlijk goedkoper dan Serverless bij continue workloads.
3. Architectuur: MPP, Columnar & Data Lake
Hoe werkt Redshift intern?
Redshift gebruikt een shared-nothing MPP architectuur: een leader node verdeelt queries over meerdere compute nodes. Elke node verwerkt zijn eigen gegevenssegment parallel. Data wordt opgeslagen in columnar format (per kolom ipv per rij), wat analytische queries enorm versnelt omdat alleen relevante kolommen worden gelezen.
Redshift Cluster Architectuur
-- TYPISCHE CLUSTER STRUCTUUR
┌─────────────────────────────────────┐
│ LEADER NODE │
│ Query planning, metadata, parsing │
│ Distribueert werk naar compute │
└──────────────┬──────────────────────┘
│
┌───────┴───────┐
▼ ▼
┌────────────┐ ┌────────────┐
│ COMPUTE 1 │ │ COMPUTE 2 │
│ Slice 0 │ │ Slice 2 │
│ Slice 1 │ │ Slice 3 │
│ (RA3→S3) │ │ (RA3→S3) │
└────────────┘ └────────────┘
-- RA3: data in managed S3 (onbeperkte opslag)
-- DC2: data in lokale NVMe SSD (max 326 TB)
-- Serverless: AWS beheert nodes volledig
-- KOLOM-OPSLAG VOORDEEL:
-- SELECT SUM(bedrag) FROM orders
-- → leest ALLEEN kolom 'bedrag', niet hele rijen
-- → 10-100x minder I/O dan row-based opslag
4. Node Types: RA3, DC2 en Serverless RPU
| Type | Opslag | vCPUs | RAM | Prijs (on-demand) | Beste voor |
|---|---|---|---|---|---|
| RA3.xlplus | Managed S3 (onbeperkt) | 4 vCPU | 32 GB | ~$1,086/node/uur | Groeiende workloads |
| RA3.4xlarge | Managed S3 (onbeperkt) | 12 vCPU | 96 GB | ~$3,26/node/uur | Enterprise data lakes |
| RA3.16xlarge | Managed S3 (onbeperkt) | 48 vCPU | 384 GB | ~$13,04/node/uur | Grootste workloads |
| DC2.large | 160 GB SSD (lokaal) | 2 vCPU | 15 GB | ~$0,25/node/uur | Kleine, vaste datasets |
| DC2.8xlarge | 2,56 TB SSD (lokaal) | 32 vCPU | 244 GB | ~$4,80/node/uur | Hoge-performance vaste DWH |
| Serverless | Managed S3 (onbeperkt) | Auto (8–512 RPU) | Auto | $0,36/RPU/uur | Variabele workloads |
5. SQL-patronen en Distributiestrategieën
De keuze van DISTKEY en SORTKEY heeft de grootste impact op Redshift performance. Verkeerde keuzes leiden tot data skew en trage queries.
Optimale tabelstructuur — Fact tabel
-- FACT TABEL: gebruik DISTKEY op meest-gejoinde kolom
CREATE TABLE dw.fact_verkoop (
verkoop_id BIGINT IDENTITY(1,1),
klant_id INTEGER NOT NULL DISTKEY, -- verdeelt data gelijkmatig
product_id INTEGER NOT NULL,
datum DATE NOT NULL SORTKEY, -- meest gefilterde kolom
bedrag DECIMAL(18,2),
aantal SMALLINT
)
DISTSTYLE KEY
COMPOUND SORTKEY (datum, klant_id); -- compound voor range + equality filters
-- DIMENSIE TABEL: gebruik DISTSTYLE ALL voor kleine tabellen
CREATE TABLE dw.dim_klant (
klant_id INTEGER PRIMARY KEY,
naam VARCHAR(255),
segment VARCHAR(50),
regio VARCHAR(100)
)
DISTSTYLE ALL; -- kopie op élke node → snelle joins, geen data movement
-- QUERY VOORBEELD: zo min mogelijk data movement
SELECT
k.regio,
k.segment,
DATE_TRUNC('month', v.datum) AS maand,
SUM(v.bedrag) AS totaal_omzet,
COUNT(*) AS aantal_orders
FROM dw.fact_verkoop v
JOIN dw.dim_klant k USING (klant_id)
WHERE v.datum BETWEEN '2025-01-01' AND '2025-12-31'
GROUP BY 1, 2, 3
ORDER BY maand;
Data laden via COPY (meest efficiënt)
-- COPY vanuit S3 — paralleliseert automatisch over alle nodes
COPY dw.fact_verkoop
FROM 's3://mijn-bucket/verkoop/2025/'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftS3Role'
FORMAT AS PARQUET
-- of: CSV DELIMITER ',' IGNOREHEADER 1 GZIP
STATUPDATE ON
COMPUPDATE ON;
-- VACUUM na bulk loads: resort data en verwijder ghost rows
VACUUM dw.fact_verkoop TO 90 PERCENT; -- hersorteert tot 90% gesorteerd
ANALYZE dw.fact_verkoop; -- update statistieken voor query planner
-- UNLOAD naar S3 voor export / data lake
UNLOAD ('SELECT * FROM dw.fact_verkoop WHERE datum >= ''2025-01-01''')
TO 's3://mijn-bucket/export/verkoop_'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftS3Role'
FORMAT PARQUET
PARTITION BY (datum)
MAXFILESIZE 256 MB
PARALLEL ON;
Window functions en analytische queries
-- RUNNING TOTALS + RANKING in één pass
SELECT
klant_id,
datum,
bedrag,
SUM(bedrag) OVER (PARTITION BY klant_id
ORDER BY datum
ROWS UNBOUNDED PRECEDING) AS cumulatief,
LAG(bedrag, 1, 0) OVER (PARTITION BY klant_id ORDER BY datum) AS vorig_bedrag,
RANK() OVER (PARTITION BY DATE_TRUNC('month', datum)
ORDER BY bedrag DESC) AS rang_in_maand
FROM dw.fact_verkoop
WHERE datum >= '2025-01-01';
-- MATERIALIZED VIEW voor herhaalde zware queries (Redshift ondersteunt auto-refresh)
CREATE MATERIALIZED VIEW mv_maandelijkse_omzet
AUTO REFRESH YES
AS
SELECT
DATE_TRUNC('month', datum) AS maand,
SUM(bedrag) AS omzet,
COUNT(DISTINCT klant_id) AS unieke_klanten
FROM dw.fact_verkoop
GROUP BY 1;
6. Redshift Spectrum — Direct Queryen in S3
Wat is Redshift Spectrum?
Redshift Spectrum laat je data in Amazon S3 queryen via gewone SQL, zonder data te importeren in Redshift. Je betaalt $5 per TB gescand. Combineer je Redshift-tabellen (warm data) met historische S3-data (cold data) in één query — de ideale data lake architectuur.
Spectrum instellen en S3 data queryen
-- STAP 1: Externe schema aanmaken (koppelt aan AWS Glue Data Catalog)
CREATE EXTERNAL SCHEMA spectrum_archive
FROM DATA CATALOG
DATABASE 'mijn_data_lake'
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftSpectrumRole'
CREATE EXTERNAL DATABASE IF NOT EXISTS;
-- STAP 2: Externe tabel definieëren (verwijst naar S3 partities)
CREATE EXTERNAL TABLE spectrum_archive.fact_verkoop_historisch (
klant_id INT,
datum DATE,
bedrag DECIMAL(18,2),
regio VARCHAR(100)
)
PARTITIONED BY (jaar INT, maand INT)
STORED AS PARQUET
LOCATION 's3://mijn-data-lake/verkoop/historisch/'
TABLE PROPERTIES ('compression'='snappy');
-- STAP 3: Gecombineerde query (Redshift + S3 data)
SELECT
'live' AS bron,
SUM(bedrag) AS omzet
FROM dw.fact_verkoop -- Redshift tabel (warm)
WHERE datum >= '2024-01-01'
UNION ALL
SELECT
'archief' AS bron,
SUM(bedrag) AS omzet
FROM spectrum_archive.fact_verkoop_historisch -- S3 Parquet (cold)
WHERE jaar BETWEEN 2020 AND 2023; -- partition pruning bespaart kosten!
7. Redshift ML — Machine Learning via SQL
Met Redshift ML train en gebruik je Amazon SageMaker-modellen direct vanuit SQL. Geen Python, geen apart ML-platform nodig. Ideaal voor churn prediction, fraude-detectie en sales forecasting direct op je warehouse data.
ML-model trainen en gebruiken
-- STAP 1: Model trainen (Redshift AutoML via SageMaker Autopilot)
CREATE MODEL ml.klant_churn_model
FROM (
SELECT
klant_id,
aantal_orders_afgelopen_90d,
gemiddeld_orderwaarde,
dagen_sinds_laatste_order,
aantal_klachten,
is_opgezegd -- TARGET variabele (0/1)
FROM dw.klant_kenmerken
WHERE datum_snapshot = '2025-01-01'
)
TARGET is_opgezegd
FUNCTION ml.predict_churn
IAM_ROLE 'arn:aws:iam::123456789:role/RedshiftMLRole'
SETTINGS (
S3_BUCKET 'mijn-ml-bucket',
MAX_RUNTIME 7200 -- max 2 uur trainen
);
-- STAP 2: Model toepassen op nieuwe klanten
SELECT
klant_id,
naam,
ml.predict_churn(
aantal_orders_afgelopen_90d,
gemiddeld_orderwaarde,
dagen_sinds_laatste_order,
aantal_klachten
) AS churn_kans
FROM dw.actieve_klanten
WHERE ml.predict_churn(
aantal_orders_afgelopen_90d,
gemiddeld_orderwaarde,
dagen_sinds_laatste_order,
aantal_klachten
) > 0.7 -- klanten met >70% churn kans
ORDER BY churn_kans DESC
LIMIT 100;
8. Vergelijking: Redshift vs BigQuery vs Snowflake
| Criterium | Amazon Redshift | BigQuery | ❄️ Snowflake |
|---|---|---|---|
| Cloud native | AWS | Google Cloud | Multi-cloud (AWS/Azure/GCP) |
| Pricing model | Compute + managed storage | Per TB verwerkt (serverless) | Credits per seconde |
| Beheer | Semi-managed (provisioned) of volledig (serverless) | Volledig serverless | Volledig managed |
| Performance | Uitstekend bij voorspelbare workloads | Uitstekend bij ad-hoc queries | Consistent hoog |
| Data sharing | Via AWS Data Exchange | Analytics Hub | Snowflake Marketplace (beste) |
| ML integratie | SageMaker (via SQL) | BigQuery ML (SQL) | Snowpark ML (Python) |
| Semi-structured data | SUPER type (JSON/Parquet) | Standaard JSON/ARRAY | VARIANT (beste JSON support) |
| Concurrency | Concurrency scaling (extra kosten) | Automatisch, onbeperkt | Multi-cluster warehouse |
| TCO bij AWS | Laagste TCO | Hoog bij grote queries | Middel, stijgt snel bij scale |
| Aanbevolen als | Je al op AWS zit | Je al op GCP zit | Je multi-cloud of data sharing nodig hebt |
Wanneer kies je Amazon Redshift?
Kies Redshift als je al werkt met AWS (S3, Glue, Lambda, Kinesis). De integraties zijn naadloos en de TCO is bij continue workloads het laagste van de drie. Redshift Serverless maakt het ook aantrekkelijk voor kleinere teams. BigQuery is beter als je GCP-native bent; Snowflake pas je toe als je data sharing over meerdere clouds nodig hebt.
9. Pricing Breakdown 2025
Provisioned (on-demand)
DC2.large: ~$0,25/uur
RA3.xlplus: ~$1,086/uur/node
RA3.4xlarge: ~$3,26/uur/node
Reserved (1 jaar)
Tot 40% korting op on-demand
3 jaar: tot 75% korting
Betaling vooruit of maandelijks
Serverless
$0,36 per RPU per uur
Min. 8 RPU, max 512 RPU
Gratis tier: 300 RPU-uur/maand
Managed Storage
RA3 + Serverless: ~$0,024/GB/maand
Spectrum: $5 per TB gescand
S3 backup: standaard S3 tarieven
Voorbeeld maandprijs
Scenario: 2x RA3.xlplus provisioned, 2 TB managed storage, 10 TB Spectrum/maand.
On-demand: 2 × $1,086 × 730 uur + 2.000 × $0,024 + 10 × $5 = ~$1.685/maand
Met 1-jaar reserved: ~$1.010/maand (40% goedkoper).
Vergelijk: Snowflake Enterprise op vergelijkbare workload ~$2.200/maand.
10. Best Practices & Performance Tuning
Top 10 Redshift Best Practices
-- 1. KIES DE JUISTE DISTKEY (meest-gejoinde kolom, hoge kardinaliteit)
DISTKEY (klant_id) -- ✅ hoge kardinaliteit, veel gebruikt in joins
DISTKEY (status) -- ❌ lage kardinaliteit → data skew
-- 2. GEBRUIK COMPOUND vs INTERLEAVED SORTKEY
-- Compound: efficiënt voor range queries op leading column
COMPOUND SORTKEY (datum, regio) -- ✅ WHERE datum >= '2025-01-01'
-- Interleaved: gelijkmatig voor meerdere kolommen (maar duurder VACUUM)
INTERLEAVED SORTKEY (datum, klant_id, product_id) -- gebruik spaarzaam
-- 3. COMPRESSIE: gebruik ENCODE AUTO of test met ANALYZE COMPRESSION
ANALYZE COMPRESSION dw.fact_verkoop;
-- Redshift raadt de beste encoding aan per kolom
-- 4. WLM (Workload Management): voorkom dat één query alles blokkeert
-- Stel queue in via console: separate queues voor ETL vs BI queries
-- 5. MATERIALIZED VIEWS voor herhaalde aggregaties
CREATE MATERIALIZED VIEW mv_dagomzet AUTO REFRESH YES AS
SELECT datum, SUM(bedrag) FROM dw.fact_verkoop GROUP BY datum;
-- 6. RESULT CACHE: identieke queries worden gecached (gratis)
-- Actief by default, werkt voor ongewijzigde tabellen
-- 7. AQUA (Advanced Query Accelerator): automatisch voor RA3 nodes
-- Verplaatst rekenkracht naar storage laag, tot 10x sneller
-- 8. VACUUM regelmatig uitvoeren na DELETE/UPDATE
VACUUM DELETE ONLY dw.fact_verkoop; -- snel: verwijdert alleen ghost rows
VACUUM FULL dw.fact_verkoop; -- langzaam: hersorteer + delete
-- 9. QUERY MONITORING via STL/SVL views
SELECT query, TRIM(querytxt), starttime, elapsed
FROM stl_query
WHERE elapsed > 60000000 -- queries langer dan 60 seconden
ORDER BY elapsed DESC
LIMIT 10;
-- 10. GEBRUIK LATE BINDING VIEWS voor flexibele schema-evolutie
CREATE VIEW vw_verkoop_huidig AS
SELECT * FROM dw.fact_verkoop
WITH NO SCHEMA BINDING; -- view breekt niet bij tabelwijzigingen
11. Aan de Slag in 15 Minuten
Stap 1: Redshift Serverless starten (gratis tier)
-- AWS Console → Redshift → Serverless → Get Started
-- Of via AWS CLI:
aws redshift-serverless create-namespace \
--namespace-name mijn-datawarehouse \
--admin-username admin \
--admin-user-password 'MijnWachtwoord123!' \
--db-name analytics
aws redshift-serverless create-workgroup \
--workgroup-name mijn-werkgroep \
--namespace-name mijn-datawarehouse \
--base-capacity 8 \ -- minimale RPU (gratis tier = 300 RPU-uur/maand)
--publicly-accessible false
Stap 2: Verbinden via Redshift Query Editor v2
-- Direct in AWS Console via Query Editor v2 (geen client nodig!)
-- Of via Python/psycopg2:
import psycopg2
conn = psycopg2.connect(
host="mijn-werkgroep.123456789.eu-west-1.redshift-serverless.amazonaws.com",
port=5439,
dbname="analytics",
user="admin",
password="MijnWachtwoord123!",
sslmode="require"
)
-- Of via SQLAlchemy (voor dbt, pandas, enz.):
-- pip install sqlalchemy-redshift psycopg2-binary
from sqlalchemy import create_engine
engine = create_engine(
"redshift+psycopg2://admin:wachtwoord@host:5439/analytics"
)
Stap 3: Eerste tabel laden vanuit S3
-- Maak IAM role aan met S3 leesrechten en koppel aan Redshift
-- Maak tabel aan
CREATE TABLE verkoop (
order_id INTEGER,
datum DATE,
bedrag DECIMAL(10,2),
klant_id INTEGER
);
-- Laad vanuit S3 CSV
COPY verkoop
FROM 's3://mijn-bucket/verkoop.csv'
IAM_ROLE DEFAULT
CSV IGNOREHEADER 1;
-- Klaar! Eerste query:
SELECT DATE_TRUNC('month', datum), SUM(bedrag)
FROM verkoop
GROUP BY 1 ORDER BY 1;
12. Veelgestelde Vragen
Wat is het verschil tussen Redshift Serverless en Provisioned?
Serverless schaalt automatisch op/neer, je betaalt alleen bij gebruik (per RPU per seconde). Provisioned heeft vaste capaciteit (nodes), betaal je altijd, maar is goedkoper bij constante workloads. Kies Serverless voor variabele of sporadische workloads; Provisioned + Reserved voor dagelijkse ETL en BI.
Kan ik Redshift gebruiken met dbt?
Ja, dbt heeft een native Redshift adapter. Installeer dbt-redshift, configureer je profiles.yml en gebruik gewone dbt modellen. Redshift ondersteunt alle dbt features inclusief snapshots, seeds, exposures en tests. Materialized views via dbt zijn ook mogelijk met materialized='materializedview'.
Hoe zit het met de beveiliging in Redshift?
Redshift biedt: VPC-isolatie, versleuteling at-rest (AES-256 via AWS KMS), SSL in transit, IAM-integratie, row-level security (RLS), column-level security, dynamic data masking (preview) en audit logging via CloudTrail. Lake Formation integratie geeft centrale data governance over Redshift én S3.
Wat is de maximale datagrootte in Redshift?
Voor RA3 en Serverless is er geen praktische limiet op opslag (managed S3 is onbeperkt). DC2 nodes hebben een maximum van 326 TB per cluster. Met Redshift Spectrum kun je petabytes aan S3-data queryen zonder dit in Redshift op te slaan.