ETL vs ELT: what's the difference?

ETL (Extract, Transform, Load) transforms data **before** loading it into the destination; ELT (Extract, Load, Transform) loads raw data first and transforms it **inside** the destination warehouse. ELT has become the default for cloud data warehouses (Snowflake, BigQuery, Databricks) because their compute is cheap and elastic, while ETL still suits heavy pre-processing or strict compliance before storage.

ETL: transform first

Data is cleaned and reshaped in a processing engine (e.g. Spark) before it lands in the warehouse. Good when you must not store raw/PII data, or transformations are compute-heavy and reused.

ELT: load raw, transform in-warehouse

Raw data lands first (often in a bronze/silver/gold medallion layout), then SQL or dbt transforms it inside the warehouse. Faster to iterate and keeps a raw copy for reprocessing.

The real difference is where the transformation runs

In ETL, data is extracted, transformed on a separate processing tier, and only the finished result is loaded into the destination. In ELT, raw data is loaded first and transformed inside the destination system using its own compute. The order of the letters is not the point — the point is which system does the work, and therefore which system you pay for and tune. ETL was the norm when storage was expensive and warehouses were rigid; ELT became practical once cloud storage got cheap and warehouses and lakehouses became elastic enough to transform at scale.

Choosing between them, and why ELT usually wins now

ELT's advantage is that the raw data is still there. When a business rule changes or a bug is found, you reprocess from raw instead of re-extracting from source systems that may have moved on — and analysts can explore columns nobody thought to keep. It also puts transformations in SQL, which more of the team can review. ETL still makes sense when data must be masked or filtered before it lands for privacy or compliance reasons, when the destination charges heavily for compute, or when you are feeding a system that cannot transform. Many production platforms do both: light cleansing in flight, then heavier modelling in the warehouse, which is exactly the raw/cleaned/curated layering most lakehouse designs use.

Example (SQL)

-- ELT: raw data already loaded into bronze, transform in the warehouse
CREATE TABLE gold_daily_sales AS
SELECT
  sale_date,
  SUM(amount) AS total_sales,
  COUNT(DISTINCT customer_id) AS active_customers
FROM bronze_sales
GROUP BY sale_date;

In ELT the raw bronze_sales table is loaded first, then transformed into an aggregated gold table with SQL.

Run this example in the free online PySpark compiler

Frequently asked questions

What is the main difference between ETL and ELT?

In ETL you transform data before loading it into the destination; in ELT you load raw data first and transform it inside the destination warehouse.

When should I use ELT instead of ETL?

Use ELT with modern cloud warehouses (Snowflake, BigQuery, Databricks) where compute is cheap and elastic, and you want to keep a raw copy for reprocessing and fast iteration.

Is ELT better than ETL?

Neither is universally better. ELT is the common default for cloud analytics; ETL still fits heavy pre-processing, streaming, or when raw/PII data must be transformed before storage.

Practice challenges

Open the free PySpark compiler · Data Engineering challenges · Data Engineering jobs