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.
- 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. - 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_messagecolumn the pipeline’s expectations did not allow. Each 15-minute attempt fails the same way, so lag grows by ~15 minutes per cycle. - There is a real downstream risk. The replenishment job reads
silver.ordersto 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.
- 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.
- 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).
- 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 lastTo reproduce lag for a scheduled-job pipeline you can compute it from run history: takeSUCCESSfinish time used to compute lag.system.lakeflow/ pipeline event log (or theevent_logfor the DLT pipeline) gives the machine-readable update events to reproduce the calculation.
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: