Data freshness is how up to date a dataset is relative to the source or to "now." Stale data is a quality failure even when every row is perfectly accurate.
How teams measure it
Common age formulas:
freshness_age = now - max(event_time) # business time lag freshness_age = now - max(loaded_at) # pipeline arrival lag
Example: if max(ordered_at) in fct_orders is 3 hours ago and the SLA is 1 hour, freshness is breached.
Related checks
- Source freshness (raw landing stopped updating)
- Model freshness (transform did not run)
- Partition arrival (today's partition missing)
SLA target: fct_orders age <= 60 minutes source max time: 10:00 warehouse max: 12:30 -> BREACH (150 minutes)
Design note
Needed freshness depends on the use case. Fraud may need minutes; weekly exec reporting may tolerate a day.
Interview tip: Define freshness as data age, show now - max(timestamp), and separate source lag from transform lag.