Etl Elt Updated: 2026-01-21

What is ETL (Extract, Transform, Load)?

A data integration process that extracts data from source systems, transforms it into a suitable format, and loads it into a target data warehouse or database.

From the field

ETL (Extract, Transform, Load) is the foundational pattern of data engineering, even if modern teams have mostly flipped the letters to ELT. The pattern has existed since the 1970s: pull data from operational systems, reshape it into something analytics can use, land it in a warehouse. What changes decade-to-decade is where the transformation happens and what tools orchestrate it. Mainframe nightly batch → Informatica/DataStage → Airflow + Spark → Fivetran + dbt — each era solves the previous era's pain.

Why ETL became ELT (and when ETL still wins)

ETL made sense when warehouses were expensive and slow and a dedicated transform server (running Informatica/Talend/SSIS) was cheaper than warehouse compute. Cloud warehouses (Snowflake, BigQuery, Redshift) inverted the economics: warehouse compute is now cheap and elastic, data movement is expensive, and keeping raw data means you can re-transform later without re-extracting. Hence ELT — load raw, transform in-warehouse. But ETL still wins in three cases: (1) compliance requiring PII removal before warehouse landing, (2) expensive source queries where transforming at the source reduces volume pulled, (3) streaming pipelines where transformation must happen in-flight. Don't let "ELT vs ETL" debates distract from the actual question: where is transformation cheapest and safest for your data?

Field story

A healthcare client inherited a 15-year-old Informatica ETL estate with 400 workflows feeding an Oracle data warehouse. Daily runs took 14 hours; any source-schema change required a consultant and a 3-week change request. Migration plan: (1) replace extraction with Fivetran/custom Python for the 80 sources; (2) land raw data in Snowflake; (3) rebuild the transforms as dbt models (six-month effort, ~800 models eventually); (4) decommission Informatica incrementally. Total timeline: 14 months. Outcome: daily pipeline from 14h → 45min, schema changes handled by in-house analysts (no consultants), Informatica license savings $180K/year, and a fully tested/documented mart layer the team could actually reason about. ETL → ELT isn't free — rebuilding 400 transforms is real work — but the ongoing cost savings are substantial.

ETL stands for Extract, Transform, Load—the traditional process for moving and preparing data for analytics. It's the backbone of data warehousing and has been used for decades to integrate data from multiple sources.

The Three Stages

1. Extract

Pull data from various source systems:
  • Databases (MySQL, PostgreSQL, Oracle)
  • SaaS applications (Salesforce, HubSpot)
  • APIs (REST, GraphQL)
  • Files (CSV, JSON, XML)
  • Streaming sources (Kafka, webhooks)

2. Transform

Apply business logic to prepare data:
  • Cleaning: Remove duplicates, handle nulls
  • Standardization: Unify formats (dates, currencies)
  • Aggregation: Summarize data for reporting
  • Enrichment: Add calculated fields or lookups
  • Validation: Apply business rules

3. Load

Write transformed data to the target:
  • Data warehouses (Snowflake, BigQuery)
  • Data lakes (S3, Azure Data Lake)
  • Operational databases

ETL vs ELT

The rise of cloud data warehouses has popularized ELT:

AspectETLELT
Transform LocationBefore loading (staging server)After loading (in warehouse)
Best ForLimited warehouse computePowerful cloud warehouses
FlexibilityLess flexible (predefined)More flexible (transform anytime)
ToolsInformatica, SSIS, Talenddbt, Snowflake, BigQuery
Modern data stacks often use ELT: load raw data first, then transform using tools like dbt.

Popular ETL/ELT Tools

  • Fivetran: Automated, fully managed connectors
  • Airbyte: Open-source data integration platform
  • Stitch: Simple, developer-friendly pipelines
  • dbt: Transformation layer (the T in ELT)
  • Apache Airflow: Workflow orchestration for custom ETL

Best Practices

  1. Incremental Loading: Only process new/changed data
  2. Idempotency: Running the same job twice should produce the same result
  3. Monitoring: Track data quality and pipeline health
  4. Documentation: Maintain data lineage and transformation logic

Key Points

Gotchas

ETL/ELT pipeline pitfalls from years of debugging:

  • Not making pipelines idempotent. Re-running a pipeline should produce the same output, not duplicate rows. Use MERGE/UPSERT instead of INSERT, use deterministic surrogate keys, and always key on business identifiers. The "oh I'll just re-run it" recovery path is so common that non-idempotent pipelines are a tax on every incident.
  • Watermark-based incremental loads that miss late-arriving data. WHERE updated_at > last_watermark misses rows arriving out of order, and they're invisible forever unless you do periodic full reconciliation. Use a lookback window (last_watermark - 3 days) plus a deduplication step.
  • No schema-change detection at extraction. Source adds a column; Fivetran or your custom extractor silently drops it; downstream consumers expecting the column break weeks later. Schema contracts, Fivetran's schema-change notifications, or CI-based schema diffing catch this.
  • Timezone confusion at boundaries. Source DB stores created_at in America/Los_Angeles, warehouse stores UTC, dashboard shows user local time. Every handoff is a chance for off-by-one-day bugs. Standardize on UTC in storage; convert only at display.
  • Unbounded memory usage on transformation. Pandas-based ETL reading a 50GB CSV into memory works until one month's data is 51GB. Use streaming/chunked processing (pandas.read_csv(chunksize=...), Polars streaming, Spark, or SQL in warehouse).
  • Full-refresh pipelines on large tables. "Drop and reload" is simple but gets costlier linearly. At some scale (usually 100GB+), you must switch to incremental. Plan for this transition before the pipeline gets slow; retrofitting incremental logic is painful.
  • Missing dead-letter queues for bad rows. Default behavior is often "fail the whole batch on one bad row." Better: route bad rows to a quarantine table with metadata, process good rows, and alert on quarantine size. One malformed JSON payload shouldn't kill the nightly load.
  • PII handled after warehouse landing. If compliance requires no raw PII in the warehouse, transformation must happen in-flight (true ETL) or via tokenization at extraction. Discovering this requirement after building an ELT pipeline is expensive.
  • Orchestrator doing transformation logic. Airflow DAGs with 200 Python operators doing GROUP BY in pandas is a common anti-pattern. Let the warehouse do warehouse-y things; use Airflow only for orchestration.
  • No lineage tracking. When a number is wrong, tracing it from the dashboard back to a specific upstream source and transformation step is the first debugging question. Without lineage (via dbt, OpenLineage, or a dedicated catalog), incidents take hours instead of minutes.

Frequently Asked Questions

What is ETL in simple terms?

ETL is a three-step process for moving data from source systems into a data warehouse for analytics. Extract: pull raw data from sources (databases, APIs, SaaS apps, files, streams). Transform: clean, standardize, and reshape the data (deduplicate, fix timezones, join with reference data, aggregate, apply business rules). Load: write the transformed data to the target warehouse. Historically, ETL was performed by dedicated tools like Informatica, SSIS, or Talend running on a transformation server separate from the warehouse. In modern cloud architectures, the ELT variant (load raw first, transform in-warehouse) is more common for cost and flexibility reasons.

What is the difference between ETL and ELT?

The order and location of transformation changes everything. ETL transforms *before* loading, typically on a separate transformation server — good when warehouse compute is expensive or when PII must be removed before landing. ELT loads raw data first, then transforms inside the warehouse using SQL — good when warehouse compute is cheap (Snowflake, BigQuery, Redshift) and you want flexibility to re-transform without re-extracting. ELT has become the default for cloud data stacks because storage is cheap, warehouse compute is elastic, and keeping raw data enables future analyses you didn't know you'd need. ETL still matters for compliance, streaming, and expensive-extraction scenarios.

What tools are used for ETL and ELT?

Extract-Load (E+L) tools: Fivetran (managed, premium), Airbyte (open-source + cloud), Stitch, Matillion, AWS Glue, Azure Data Factory, Google Dataflow, custom Python with libraries like dlt or pyairbyte. Transform tools: dbt (dominant for SQL transformation), Apache Spark (for large-scale or Python-heavy), dbt Python models, SQLMesh (newer alternative). Full ETL platforms: Informatica, Talend, SSIS, IBM DataStage, Matillion (legacy and enterprise). Orchestration: Apache Airflow, Dagster, Prefect, dbt Cloud, Databricks Workflows. Most modern stacks pick one from each category: Fivetran + dbt + Airflow is the common combination.

Why is ETL important?

Operational systems (CRM, ERP, app databases) are optimized for transactions, not analytics. Running complex analytical queries against them hurts application performance and yields slow results. ETL solves this by moving data out to an analytical system (warehouse) and reshaping it into analytics-friendly structures. It also unifies data from many sources (CRM + ERP + web analytics + ad platforms) into a single queryable place. Without ETL, every analyst would have to write custom extraction logic per source and every dashboard would run against production databases — a scalability and governance nightmare. ETL is the plumbing that makes analytics possible at scale.

What is a typical ETL pipeline architecture?

Modern reference architecture: (1) Source systems — OLTP databases, SaaS apps, files, event streams; (2) Extraction/Ingestion layer — Fivetran/Airbyte/custom connectors pulling data; (3) Raw/Bronze layer — landed as-is in the warehouse, partitioned by load date; (4) Staging/Silver layer — light cleansing, typing, deduplication (dbt staging models); (5) Marts/Gold layer — business-facing fact and dimension tables (dbt marts); (6) BI/ML consumers — Tableau, Looker, Power BI, ML feature stores. Cross-cutting: orchestration (Airflow/Dagster/dbt Cloud), data quality (Great Expectations/Soda/Monte Carlo), catalog/lineage (DataHub/OpenMetadata/Atlan). The medallion (Bronze/Silver/Gold) pattern is now the dominant shape.

What are ETL best practices?

(1) Idempotency — re-running produces same output, via MERGE/upsert and deterministic keys; (2) Incremental loading with lookback windows for late data; (3) Separate raw, cleaned, and mart layers so you can re-transform without re-extracting; (4) Data tests at every layer (dbt tests, Great Expectations) — catch errors close to the source; (5) Schema-change notifications — don't let silent schema drift break downstreams; (6) Dead-letter queues for bad rows — one bad row shouldn't fail a batch; (7) Observability — track row counts, freshness, duration per pipeline; (8) Named owners with SLAs for every pipeline; (9) Version-controlled code (git) for all transformation logic; (10) CI that runs tests on PRs before deploying pipeline changes.

How do you monitor ETL pipelines?

At minimum: (1) run status — success/failure/duration for every job, sent to Slack/PagerDuty on failure; (2) row counts — compare to expected ranges, alert on outliers; (3) freshness — time since last successful load per dataset, alert if stale; (4) data quality — pass/fail rate of dbt tests, Great Expectations suites, Soda checks; (5) resource metrics — warehouse compute, memory, cost per run. Tools: native Airflow UI, Dagster's asset checks, dbt Cloud's observability, plus dedicated platforms like Monte Carlo, Bigeye, or Elementary for lineage-aware observability. The goal is: when something breaks, you know before the consumer does.

Related Terms

Data Warehousedbt (Data Build Tool)Data PipelineChange Data Capture (CDC)

Related Tools

FivetranAirbytedbtStitchTalend

Learn More

Browse All Terms Read Articles