ETL vs ELT: decide where transformation runs
ETL transforms before loading; ELT loads raw data first and transforms inside the destination. The choice follows where compute is cheap and what history you must keep.
What are you trying to do?
Place transformation before or after the load by asking where compute is cheapest and whether raw history must survive.
Why are you doing it?
ETL came from an era when warehouse storage and compute were bought together and were expensive, so you transformed outside and loaded only curated rows. Cloud warehouses and lakehouses separate cheap, durable storage from elastic compute, so landing raw data first is inexpensive, keeps the original for audit and replay, and lets you rebuild every derived table when business logic changes. ELT pays for that flexibility in two places: raw (possibly sensitive) data now sits in the destination, so access control and masking move later in the flow, and transformation compute is billed where the data lives. ETL still wins when data must be filtered, masked, or reduced before it may legally or economically land.
ETL — transform before load
Extract
Read from the source
Transform
Clean and reshape in an external engine
Load curated
Only the finished tables arrive
ELT — load first, transform in place
Extract
Read from the source
Load raw
Immutable copy kept for replay
Transform
SQL runs where the data lives
Serve
Curated tables for consumers
The same four verbs in a different order. The order decides where compute is paid for and whether raw data is kept.
Data Pipelines Pocket ReferenceFundamentals of Data EngineeringAnalytics Engineering with SQL and dbtData Engineering Design Patterns
How are you going to do it?
- Default to ELT when storage is cheap and the destination scales compute elastically: land raw, then transform with versioned SQL.
- Choose ETL (or an in-flight transform) when data must be minimized, masked, or validated before it is allowed to land.
- Keep the raw layer immutable. A logic change then becomes a re-run over retained data instead of a re-extraction from a source that may have changed.
| Question | ETL | ELT |
|---|---|---|
| Where transformation runs | External engine before the destination | Inside the warehouse or lakehouse |
| Raw history | Often discarded after the transform | Kept as an immutable raw layer |
| When logic changes | Re-extract from the source, if it still has the data | Re-run SQL over retained raw data |
| Governance exposure | Sensitive fields can be dropped before landing | Raw sensitive data lands, so masking and access control move later |
| Fits when | Data must be reduced or masked before landing | Storage is cheap and compute is elastic |