The traditional pattern: Extract, Transform, Load (ETL). Pull data from sources, transform in a separate process, load the cleaned data into the warehouse.
The modern pattern: Extract, Load, Transform (ELT). Pull raw data, load it as-is into the warehouse, transform inside the warehouse using SQL.
The shift is real and recent. ELT is the dominant paradigm in modern data stacks.
Old data warehouses (Teradata, Oracle, on-prem) were:
Loading raw data and transforming inside was expensive. The natural pattern: clean and reduce data before loading; warehouse only sees the final shape.
Tools: Informatica, Talend, custom Python/Java jobs running outside the warehouse.
Modern cloud data warehouses (Snowflake, BigQuery, Redshift, Databricks) are:
Loading raw data is cheap. Transformation in SQL is fast. The warehouse can do what dedicated ETL tools used to do, but in SQL that analysts can read and write.
The natural pattern flipped: load raw; transform in warehouse.
Sources → Ingestion (Fivetran, Airbyte, custom) → Raw warehouse layer → dbt → Analytics tables
The warehouse holds:
Each layer is SQL transforms over the previous. dbt is the dominant tool for managing these transforms. See DbtAndAnalyticsEngineering.
Most transformations are SQL. Analysts can read and modify them. No separate ETL skill required.
Raw data preserved. Transformations re-run produce the same result. Bug found? Fix the SQL; re-run.
Data is in the warehouse already. Analysts can explore raw and transformed data freely.
Modern warehouses are fast. Transformations in SQL on Snowflake/BigQuery often beat external ETL.
Raw data is there; just re-run transforms. No need to re-extract from sources.
Complex JSON parsing, ML feature engineering, image processing. Sometimes the transform belongs in code, not SQL.
Sometimes you can't load raw data. PII redaction must happen before warehouse.
Heavy raw data load can stress source systems. Lightweight extracts may be necessary.
ELT in cloud warehouses is cheap until it isn't. At extreme scale, dedicated processing (Spark, Flink) can beat warehouse compute.
For most modern data stacks, ELT is right. ETL is for specific cases.
Some modern stacks do:
The transformations happen in the warehouse; the result is loaded to operational stores (search indexes, caches, etc.) for low-latency access.
This is functional ELT plus a "publish" step.