Skip to main content
Metrics type: Key MetricsCategory: Pipelines

At a glance

Pipeline Lag (since last success) is the elapsed time since your data pipeline last completed a successful run. It answers the question every data team dreads being asked: “how stale is the data?”. If a pipeline that should refresh every 15 minutes last succeeded 90 minutes ago, every dashboard, Delta table, and downstream consumer fed by that pipeline is showing data that is up to 90 minutes old. The card turns red when the lag exceeds the pipeline’s own expected interval, so a fast pipeline and a slow daily pipeline are each judged against their own cadence.

Calculation

For each pipeline in scope, Vortex IQ records the finish time of the most recent run whose result state was successful (COMPLETED for a Delta Live Tables update, or SUCCESS for a scheduled Job run). The lag is current_time - last_successful_finish_time, expressed in seconds and rendered in human-friendly units on the card (minutes/hours). Crucially, only successful runs reset the clock. A pipeline that is currently retrying, failing repeatedly, or stuck mid-update does not reset the lag, so the number keeps climbing even while the pipeline looks “busy”. This is deliberate: a pipeline that has been failing for an hour has produced no fresh data for an hour, regardless of how many attempts it made. The alert compares the live lag against the pipeline’s expected interval, derived from its schedule (a cron trigger, a continuous-pipeline cadence, or the Alert Rules tab override). Because the threshold is relative to each pipeline’s own cadence, the same card sensibly governs both a 5-minute streaming pipeline and a nightly batch pipeline without false alarms on the slow one.

Worked example

A homewares retailer runs a Delta Live Tables pipeline, orders_to_lakehouse, every 15 minutes. It ingests order events from the storefront, applies dedup and currency normalisation, and writes a silver.orders Delta table that feeds the finance dashboard and the inventory-replenishment job. Snapshot taken on 19 May 26 at 11:42 BST. The card is red because 94 minutes of lag dwarfs the 15-minute expected interval. The run-state history is the key: the pipeline has attempted four times since 10:08 and failed three of them, so the lag clock has not reset.
  1. The data is stale by 94 minutes and getting worse. Everything downstream of silver.orders, the finance dashboard and the replenishment job, is operating on a snapshot from 10:08. The longer the lag, the larger the gap the eventual successful run must backfill.
  2. The failures explain the lag. Drilling into the pipeline update events shows the dedup step failing on a schema-evolution error: an upstream change added a gift_message column the pipeline’s expectations did not allow. Each 15-minute attempt fails the same way, so lag grows by ~15 minutes per cycle.
  3. There is a real downstream risk. The replenishment job reads silver.orders to decide reorder quantities. Running on 94-minute-old order data, it under-counts recent sales of a flash-sale item and risks ordering too little stock. This is where a pipeline-lag problem becomes a business problem.
Three takeaways:
  1. Lag, not failure count, is the metric that matters to the business. A pipeline can fail ten times and still be fine if a recovery run lands inside the expected interval. What hurts is uninterrupted staleness, which is exactly what this card measures.
  2. Always pair lag with the run-state history. A growing lag with recent failures is a broken pipeline (fix the code). A growing lag with no failures is a stuck or unscheduled pipeline (check the trigger / cluster availability).
  3. The threshold must match the cadence. If you change a pipeline’s schedule, update its expected interval in the Alert Rules tab, otherwise a now-hourly pipeline will keep alerting against an old 15-minute expectation.

Sibling cards

Reconciling against the source

Where to look in Databricks:
Delta Live Tables in the workspace: open the pipeline, the “Update history” panel shows the timestamp and result of every update, so you can read the last successful finish directly. Workflows → Jobs → Runs for scheduled-job pipelines: the run list shows the last SUCCESS finish time used to compute lag. system.lakeflow / pipeline event log (or the event_log for the DLT pipeline) gives the machine-readable update events to reproduce the calculation.
To reproduce lag for a scheduled-job pipeline you can compute it from run history: take current_timestamp() minus the latest end_time where result_state = 'SUCCESS'. For a DLT pipeline, read the most recent update with state COMPLETED from the pipeline event log. Why our number may legitimately differ from the Databricks UI: Cross-connector reconciliation:

Known limitations / FAQs

The pipeline is clearly running right now, so why is lag still high? Because lag only resets on a successful completion, not on activity. A pipeline that is busy retrying or stuck mid-update has produced no fresh data, so the lag clock keeps ticking. Check the update/run history: if recent attempts are FAILED or the current update has been running far past its normal duration, the data is still as stale as the last green run. How is “expected interval” determined for the alert? It comes from the pipeline’s schedule by default: a cron trigger, a continuous-pipeline cadence, or the interval you set in the Alert Rules tab. The alert fires when live lag exceeds that interval, so each pipeline is judged against its own cadence. If you reschedule a pipeline, update the expected interval so the threshold stays correct. My pipeline runs hourly but lag alerts only after about an hour. Is that right? Yes. For an hourly pipeline, a healthy lag is anything under roughly one hour (the time until the next scheduled run). Lag naturally grows toward the interval and resets to near zero on each success. The alert is designed to fire only when lag exceeds the interval, meaning a scheduled run was missed or failed. Does a continuous (streaming) DLT pipeline have meaningful lag? Yes, but it is computed differently. There is no discrete run, so lag is derived from the most recent successful flow checkpoint or the recency of processed records. For continuous pipelines, set a tight expected interval (for example a few minutes) so a stalled stream is caught quickly. Pair with DLT Pipeline Status Distribution to confirm the pipeline is still in RUNNING state. Which pipeline does the headline number represent if I have many? The headline surfaces the worst (most-lagging) pipeline in the connector’s scope, so the card always shows your biggest staleness risk. To monitor a specific critical pipeline on its own, stack a panel scoped to that pipeline so it cannot be masked by a less-important laggard. Lag suddenly dropped to zero but I did not fix anything. What happened? A scheduled run succeeded on its own, resetting the clock. This is normal for transient failures (a brief upstream outage, a momentary cluster shortage) that clear before the next cycle. If lag oscillates, succeeding then lagging repeatedly, treat it as a chronic reliability problem and investigate via Top 10 Failing Workflows (7d) rather than waiting for each self-recovery. Can lag be high even though the data looks fine? Yes, if the pipeline is one of several writing the same target table, or if a manual backfill already loaded the data the pipeline would have produced. The card measures pipeline-run recency, not table freshness directly. When in doubt, check the target Delta table’s latest commit timestamp in the table history alongside this card.

Tracked live in Vortex IQ Nerve Centre

Pipeline Lag (since last success) is one of hundreds of KPI pulses Vortex IQ tracks across Databricks and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.