ETL/ELT Patterns • Full Refresh vs Incremental LoadsHard⏱️ ~3 min
When to Choose Full Refresh vs Incremental: Decision Framework
The Trade Off Space:
The decision is not about which pattern is universally better. It is about matching the pattern to your specific constraints around data volume, change rate, required freshness, and operational complexity tolerance.
Choose Full Refresh When:
First, data volume is small to moderate (under 100 GB or under 100 million rows) and your required cadence is daily or longer. A 20 GB table that reloads in 15 minutes nightly is not worth the incremental complexity. The operational simplicity of truncate and reload wins.
Second, you need guaranteed correctness with no drift over time. Full refresh gives you a perfect snapshot at extraction time. This matters for regulatory reporting, financial reconciliation, or compliance tables where you periodically want to recompute everything from scratch to defend against silent data corruption or logic bugs that accumulated over months of incremental updates.
Third, your source system does not support reliable change detection. If there is no
Full Refresh
Simplicity, strong correctness, no state
vs
Incremental
Scalability, low latency, complex state
updated_at timestamp, no Change Data Capture (CDC) tooling, and the source is a third party API you cannot control, full refresh may be your only practical option.
Choose Incremental When:
First, data volume exceeds 100 GB or 100 million rows AND daily change volume is significantly smaller (under 10 to 20 percent of total). This is where incremental loads deliver 5x to 100x cost and latency improvements. The numbers matter: if you are processing 1 TB daily with only 10 GB changing, incremental saves you 990 GB of reads and writes.
Second, you require sub hour freshness. Business dashboards that must reflect data within 15 to 30 minutes cannot wait for multi hour batch jobs. Incremental pipelines can run every 10 to 15 minutes, keeping latency low as data grows.
Third, your pipeline already has the operational maturity for watermark management, idempotent writes, and monitoring drift. If your team can implement CDC or timestamp based tracking reliably and you have observability to detect when incremental logic misses updates, the complexity is justified by the scale benefits.
❗ Remember: The hybrid approach is often the right answer. Use incremental for hot data (last 30 days), full refresh for cold partitions quarterly. You get both low latency and bounded drift without full complexity.
Concrete Decision Example:
A user profile table with 200 million rows, where 99 percent of reads are lookups by user ID and only 2 million profiles update daily. Daily change rate is 1 percent. This is a clear incremental candidate: you process 2 million rows instead of 200 million, finishing in minutes with fresh data. Contrast this with a compliance audit table with 50 million rows, refreshed weekly for regulatory reports. Even though it is large, the weekly cadence and correctness requirements make full refresh the safer, simpler choice.
The meta principle: start simple with full refresh. When cost or latency becomes painful (jobs taking over 2 hours, cloud bills spiking), migrate hot tables or recent partitions to incremental. Measure the impact and expand incrementally.💡 Key Takeaways
✓Choose full refresh for datasets under 100 GB with daily or longer cadence where 15 to 30 minute runtime is acceptable and simplicity outweighs optimization
✓Choose incremental when data exceeds 100 GB AND daily changes are under 10 to 20 percent of total volume, delivering 5x to 100x improvements in cost and latency
✓Hybrid pattern maintains hot data (last 30 days) incrementally for freshness while periodically refreshing cold partitions for correctness, balancing both concerns
✓Start with full refresh for simplicity, migrate to incremental only when jobs exceed 2 hours or cloud costs become painful, measuring impact before expanding
📌 Examples
1User profile table: 200 million rows with 1 percent daily change rate (2 million updates) is ideal for incremental, processing 1 percent instead of 100 percent
2Compliance audit table: 50 million rows refreshed weekly for regulatory reports should use full refresh for guaranteed correctness despite large size
3E-commerce catalog with 80 percent of products changing daily means incremental saves little, full refresh may be simpler