CloudCostCompare
EN

Guides

ETL pipeline costs: Glue vs Data Factory vs Dataflow

By Rohit Athaide · Published 4 Nov 2026

Short answer: an ETL or ELT pipeline extracts data from sources, changes it and loads it somewhere you can query it. Managed services bill for the compute that runs the work and, in some cases, for orchestration. Costs leak through over-sized workers, frequent small runs and full reloads of data that has not changed.

Key points

  • Compute time is the main cost, billed per second or minute with minimums.
  • Some services also bill per activity run.
  • Incremental loads are the biggest saving.
  • Many small files slow jobs and raise request charges.
  • Match code-first services with code-first services.

Which services are there?

Cloud Services
AWS Glue
Azure Data Factory (and Synapse pipelines)
Google Cloud Dataflow, Dataproc and Cloud Data Fusion
Oracle OCI Data Integration and Data Flow

They are equivalent as managed tools for running transforms on a schedule or on events. Some are code-first (you write Spark or Beam jobs) and some are visual.

How do they bill?

  1. Compute time. Billed per second or minute for workers, in units such as data processing units or vCPU hours. This is the main cost.
  2. Orchestration. Some services bill per pipeline activity run or per trigger.
  3. Data movement. Copying between sources may bill by integration runtime hours.
  4. Storage and transfer. The data lake and any cross-region copies are separate. See data lake cost basics.

Minimum billing periods matter. A job that runs for ten seconds may be billed for a full minute.

What does a worked example look like?

Made-up round numbers to show the method, not real prices. A job runs every 15 minutes. Each run uses 10 workers with a 1-minute minimum.

Setup Calculation (made up, 0.44 per worker-hour) Monthly cost
Runs: 4 per hour x 730 h 2,920 runs
Each run takes 40 s, billed as 1 minute minimum 10 workers x 1/60 h x 0.44 = 0.0733 per run 214
Same work, one run per hour taking 90 s, billed 90 s 730 runs x 10 x 1.5/60 x 0.44 80
Incremental, 15-minute runs reading only new files, 15 s billed as 1 minute unchanged billing 214

Batching four small runs into one hourly run cuts the bill by about 63 percent, because the per-run minimum and startup are paid 730 times instead of 2,920. Incremental loading does not help when the minimum already dominates, which shows why both run frequency and data read matter. If each full reload read 100 times more data, incremental loading would be the bigger saving.

Where do costs leak?

  • Over-sized workers. Jobs given more capacity than they use.
  • Frequent small runs. Each pays startup time and minimums. Batch them.
  • Rewriting everything every run. Process only new or changed data.
  • Many small files. They slow jobs and raise request charges.
  • Failed jobs that retry without limits.
  • Development clusters left running. See dev and test costs.

How can I cut the cost?

  1. Run incremental loads.
  2. Write columnar, partitioned files. See partitioning and Parquet.
  3. Use autoscaling and set a maximum.
  4. Use interruptible capacity where the service allows it.

Which mistakes are common?

  • Scheduling hourly jobs that could run daily.
  • Leaving a development endpoint running over a weekend.
  • Reloading full tables for a few changed rows.
  • Producing thousands of tiny output files.

Decision checklist

  • How often does the data need to be fresh?
  • Does each run read only new data?
  • Is there a worker maximum and a retry limit?
  • Are outputs columnar and partitioned?

Next steps

Our data platform estimator prices a batch transform on each cloud from published rates. For continuous data, see stream processing costs, and for the destination see data warehouse pricing.

Frequently asked questions

What is ETL?

Extract, transform, load: pulling data from sources, changing it and loading it somewhere you can query it. ELT loads first and transforms inside the destination.

How are managed ETL services billed?

Mainly by compute time for workers, in units such as data processing units or vCPU hours, plus orchestration charges per activity run on some services, and the storage and transfer around them.

Why does a short job cost more than expected?

Minimum billing periods. A job that runs for ten seconds may be billed for a full minute, and every run pays startup time.

How can I make pipelines cheaper?

Run incremental loads, write partitioned columnar files, use autoscaling with a maximum, and use interruptible capacity where the service allows it.

Should I use a visual tool or write code?

Compare like with like. Code-first services such as Spark or Beam jobs and visual tools bill differently, so match a code-first service with another code-first service.