Skip to content

Flight Data — Late Aircraft (Cascade) Delay Patterns

Flight Data benchmark · all Flight Data queries

Flights delayed due to late incoming aircraft by carrier

Representative SQL

Rendered in the benchmark’s native SQL with default parameters (no dialect translation available).

SELECT
f.reporting_airline,
a.name AS airline_name,
COUNT(*) AS total_flights,
SUM(CASE WHEN f.late_aircraft_delay > 0 THEN 1 ELSE 0 END) AS cascade_delayed,
ROUND(100.0 * SUM(CASE WHEN f.late_aircraft_delay > 0 THEN 1 ELSE 0 END) / COUNT(*), 2) AS cascade_rate_pct,
ROUND(AVG(CASE WHEN f.late_aircraft_delay > 0 THEN f.late_aircraft_delay END), 2) AS avg_cascade_delay,
FLOOR(
(
SUM(
CAST(CASE
WHEN f.late_aircraft_delay > 0
THEN ROUND(f.late_aircraft_delay * 10)
ELSE 0
END AS BIGINT)
) + 5
) / 10
) AS total_cascade_minutes
FROM flights AS f
LEFT JOIN airlines AS a
ON f.reporting_airline = a.code
WHERE
f.cancelled = 0 AND f.flight_date >= '2021-08-01' AND f.flight_date < '2025-01-01'
GROUP BY
f.reporting_airline,
a.name
ORDER BY
cascade_rate_pct DESC,
f.reporting_airline

Representative DataFrame

Expression family (Polars, PySpark, DataFusion), default parameters.

def cascade_delays_expression_impl(ctx: DataFrameContext) -> Any:
flights = ctx.get_table("flights")
col, lit = ctx.col, ctx.lit
return (
flights.join(_airline_names(ctx), left_on="reporting_airline", right_on="a_code", how="left")
.filter(_date_condition(col, lit, lambda col, lit: col("cancelled") == lit(0)))
.with_columns(
(col("late_aircraft_delay") > lit(0)).cast(int).alias("_cascade"),
ctx.when(col("late_aircraft_delay") > lit(0))
.then(col("late_aircraft_delay"))
.otherwise(lit(None))
.alias("_cascade_pos"),
ctx.when(col("late_aircraft_delay") > lit(0))
.then(_round_half_away(ctx, col("late_aircraft_delay") * lit(10), 0).cast(int))
.otherwise(lit(0))
.alias("_late_tenths"),
)
.group_by("reporting_airline", "airline_name")
.agg(
col("flight_id").count().alias("total_flights"),
col("_cascade").sum().alias("cascade_delayed"),
col("_cascade_pos").mean().alias("_avg_cascade"),
col("_late_tenths").sum().alias("_total_tenths"),
)
.with_columns(
_round_half_away(ctx, lit(100.0) * col("cascade_delayed") / col("total_flights"), 2).alias(
"cascade_rate_pct"
),
_round_half_away(ctx, col("_avg_cascade"), 2).alias("avg_cascade_delay"),
((col("_total_tenths") + lit(5)) / lit(10)).floor().alias("total_cascade_minutes"),
)
.select(
"reporting_airline",
"airline_name",
"total_flights",
"cascade_delayed",
"cascade_rate_pct",
"avg_cascade_delay",
"total_cascade_minutes",
)
.sort(["cascade_rate_pct", "reporting_airline"], descending=[True, False])
)

Get the exact query for your run

The blocks above are representative. To get the precise statement a specific platform runs at a specific scale, substitute your own values:

from benchbox import FlightData
bench = FlightData(scale_factor=1.0) # your scale factor
print(bench.get_queries()['cascade-delays'])

For the DataFrame form:

from benchbox.core.query_catalog import get_dataframe_render
print(get_dataframe_render('flightdata', 'cascade-delays', family="expression").source) # or family="pandas"

Source

Query text: benchbox/core/flightdata/queries.py