nightly (one row per completed run) publication cadence
Evidence
Reference data
Stable context used to interpret other datasets
Time basis
Point-in-time records
UTC · computed_at
Overview
Resolve the latest usable run here — computed_at = (SELECT max(computed_at) FROM atg.ercot_constraint_sensitivity_runs) — and never off max(computed_at) of the sensitivities themselves, because a run writes its rows in blocks that all carry the new timestamp and an unfinished or abandoned run would otherwise look like the newest one. Each row also carries how much evidence that run had: interval_coverage is the fraction of published dispatch intervals that survived admission, intervals_refused_unexplained counts intervals showing congestion with no constraint recorded as binding (an unobserved binding set), constraint_feed_lag_minutes is how far the constraint feed trailed the price feed, and constraints_seen / constraints_in_fit / constraints_reported show how many constraints bound, how many were good enough to control for, and how many earned a published estimate.
Query contract
The newest row is the newest COMPLETE run: computed_at = (SELECT max(computed_at) FROM atg.ercot_constraint_sensitivity_runs). Use that value to filter atg.ercot_constraint_sensitivities.
Analysis rules
·One row per run. Counting rows counts runs, not constraints, nodes or intervals — those are columns on each row.
Interpretation
·A run appears here only after every one of its node blocks has landed. That is the point of the table: rows go into the sensitivities table block by block, all carrying the new computed_at, so a run still being written — or one that died halfway — would otherwise look like the newest. Absence of a row means the run did not finish, not that it did not happen.
·This is provenance about an estimation job. Nothing in it measures the grid: it says how much evidence a run had, not what congestion occurred.
Schema18
Column
Type
computed_atDateTime64(3, 'UTC')
run_idString
isoLowCardinality(String)
window_startDateTime64(3, 'UTC')
window_endDateTime64(3, 'UTC')
rows_writtenUInt64
rows_estimatedUInt64
constraints_seenUInt32
constraints_in_fitUInt32
constraints_reportedUInt32
nodesUInt32
n_intervalsUInt32
intervals_publishedUInt32
intervals_refused_thinUInt32
intervals_refused_unexplainedUInt32
interval_coverageFloat32
constraint_feed_lag_minutesFloat32
method_versionLowCardinality(String)
Sample data
No preview available.
Coverage
No time-indexed data — coverage isn’t applicable to this dataset.
Estimated sensitivity of every ERCOT pricing location's price to every binding transmission constraint: one row per constraint, contingency, and location, recomputed nightly over a rolling 60-day window. This is what answers 'which nodes drive this constraint' and 'which constraints is this node exposed to'. Covers ERCOT's transmission constraints with their contingency and both named terminals, over 1,123 settlement points. shift_factor is in the ISO's orientation — POSITIVE means an incremental MW injected at that node increases loading on the constraint and the node is paid below system lambda while it binds; NEGATIVE means generation there relieves the constraint and earns a premium. These are ESTIMATES recovered from the price identity LMP = energy - sum(shift_factor x shadow_price), not a published PTDF matrix. They are measured RELATIVE TO THE MARKET'S REFERENCE — the identity yields SF(node) - SF(reference), so a single absolute value should be quoted as 'relative to the system reference' rather than as the node's PTDF, while DIFFERENCES between nodes are exact because the reference term cancels. Three further differences from a published matrix: they describe a NODE (a generator at that node inherits its location's value, and two units at one node are indistinguishable), they reflect the topology actually in effect across the window including outages rather than a stated base case, and every one carries a std_error from a 200-draw block bootstrap that resamples whole days. Read std_error before quoting shift_factor: an estimate whose absolute value is not at least twice its standard error is not distinguishable from zero. estimation_status says why a row has no number — 'thin_support' (in the fit, so it is controlled for, but under 12 binding intervals or under 3 distinct binding days), 'no_support' (under 3 binding intervals; not a regressor), or 'collinear' (it bound in lockstep with another constraint, so the two cannot be separated). Where from_station and to_station are populated they identify the monitored element and are NOT the constrained direction — the sign of shift_factor is what says which way. Every read must pin computed_at to one run, and must resolve that run through the companion atg.<iso>_constraint_sensitivity_runs ledger rather than off max(computed_at) here — rows are written in blocks that all carry the new timestamp, so an unfinished or abandoned run would otherwise look like the newest. Mixing runs averages a node across different network topologies.
Cleared ERCOT monthly Congestion Revenue Right auction awards, one row per source-to-sink CRR and time-of-use block, including awarded MW and the auction shadow price per MWh. This is public auction evidence for who acquired a path and at what clearing price. It does not contain realized day-ahead congestion settlements, fees, later trades, the holder's full portfolio, or net profit, so auction cost must not be described as payout or profitability. The official source is ERCOT report NP7-803-M.
Which transmission facilities bound in ERCOT's day-ahead market and what each one cost, one row per interval and constraint. 2.94M rows, 2017-01 to the next delivery day. Columns: event_time, constraint_name, shadow_price_usd_mwh, plus contingency, from_station and to_station, limit_mw and flow_mw. The shadow price is the marginal cost of the binding limit — what the market would have saved from one more megawatt of capability on that element. This is the table that answers WHY congestion appeared; a price spread between two locations shows that they separated but not which facility separated them.
Which transmission facilities bound in ERCOT's real-time market and what each one cost, one row per interval and constraint. 8.42M rows, 2014-05 to now. Columns: event_time, constraint_name, shadow_price_usd_mwh, plus contingency (the outage the limit is evaluated against), from_station and to_station (the ends of the constrained element), limit_mw and flow_mw. The shadow price is the marginal cost of the binding limit — what the market would have saved from one more megawatt of capability on that element. This is the table that answers WHY congestion appeared; a price spread between two locations shows that they separated but not which facility separated them.