The Production Data Query dump — everyone calls it PDQ — is the RRC's monthly export of the production system that backs its public production search. It is the largest dataset the Commission publishes and the one people most often get wrong.
It arrives as a single large archive containing sixteen }-delimited files, each
with a header row. Together they cover production from 1993 to the present at
several different grains, plus the dimension tables that give the codes meaning.
The sixteen tables, grouped by what they are for
Dimensions — the lookups. A county table (county number, FIPS code, name, district number, district name, onshore flags), a district table (number, name, office phone and location), an operator warehouse (operator number, name, P-5 status, filing dates, e-file status), a field warehouse (field number, name, district, class, discovery dates, salt dome and offshore flags, wildcat flag), a regulatory lease warehouse (the lease's identity, operator, field and well number), and a well completion table.
Cycle tables — the actual production, one row per reporting period per entity. There is one for each grain: district, county, county-and-lease, field, lease, and operator.
Disposition — a very wide table breaking each lease's monthly volumes down by what happened to the product.
Summaries and range metadata — first and last cycle per lease, plus a small table recording the oldest and newest cycles in the extract and the dates the oil and gas data were pulled.
A "cycle" is a production month
Every cycle table is keyed by cycle_year, cycle_month and a combined
cycle_year_month of the form YYYYMM. That combined column is a string, not
a number, and comparing it as text works correctly because the format sorts
lexicographically:
WHERE cycle_year_month BETWEEN '202401' AND '202612'
A cycle is the month the production was attributed to, not the month it was reported or the month the file was built. Those three dates can be very far apart.
Lease cycle versus county-lease cycle
Two tables look almost identical and are not interchangeable.
og_lease_cycle is one row per (oil/gas code, district, lease, cycle). It is
the lease's total for the month, statewide. Its columns are prefixed lease_ —
lease_oil_prod_vol, lease_gas_prod_vol, lease_cond_prod_vol,
lease_csgd_prod_vol, plus allowables, ending balances and total dispositions.
og_county_lease_cycle is one row per (oil/gas code, district, lease, cycle,
county). Its columns are prefixed cnty_lse_. It exists because a lease can
straddle a county line, and volumes have to be attributable to a county for
severance and reporting purposes.
The relationship is what you would hope: the county-lease rows for a lease and cycle sum to that lease's row. Which means:
-- Correct: county-level totals come from the county-lease table
SELECT county_name, sum(cnty_lse_oil_prod_vol) AS oil_bbl
FROM texas.pdq_og_county_lease_cycle
WHERE cycle_year_month = '202601'
AND oil_gas_code = 'O'
GROUP BY county_name;
-- Wrong: joining both tables and summing double-counts every multi-county lease
Use the lease table when your question is about a lease, an operator or the state. Use the county-lease table when your question is about counties. Never sum across both.
The same logic applies to the field, district, county and operator cycle tables. They are pre-aggregated views of the same underlying reports, and they exist so you do not have to aggregate tens of millions of rows yourself. If your question matches one of their grains, use it — it will be orders of magnitude faster and it will agree with the RRC's own published numbers.
Four products, not two
Every cycle table carries four volume families, and confusing them is the most common substantive error in Texas production analysis.
- Oil — crude, in barrels.
- Casinghead gas (
csgd) — gas produced from an oil well, in MCF. - Gas — gas produced from a gas well, in MCF.
- Condensate (
cond) — liquid hydrocarbon that drops out of gas, in barrels.
"Total oil" means oil plus condensate. "Total gas" means gas plus casinghead gas.
A query that sums only lease_oil_prod_vol is reporting crude and silently
excluding condensate, which in the Permian and Eagle Ford is a large number.
Alongside each volume sits an allowable and, for oil, an ending balance. The allowable is the regulatory maximum for that entity and month; it is a limit, not a production figure. Ending balance is inventory held in tanks. Neither is production. Summing an allowable column and calling it output is a mistake that gets made surprisingly often.
Disposition codes
The disposition table answers "where did it go". Each product has a set of numbered disposition codes and a column per code — oil disposition 00 through 09 plus 99, gas 01 through 09 plus 99, and so on for condensate and casinghead gas. Broadly they distinguish sales, transfers to other leases, stock movements, plant processing, flare and vent, and lease use, with 99 as a catch-all.
The exact meaning of each numbered code comes from the RRC's PDQ manual; EZRRC publishes them as a code set so you can see the label next to the column rather than counting positions in a wide table. Two practical notes: dispositions should reconcile against the corresponding total-disposition column on the cycle row, and a lease's dispositions can exceed its production in a month because inventory can be sold down.
Reporting lag: why the last two months always lie
Operators file production reports monthly. The RRC processes them, applies corrections, and accepts amended reports for a long time afterwards. The PDQ dump is a monthly snapshot of that moving system.
The consequence is that recent cycles are systematically incomplete. Every freshly-published month is missing reports that have not arrived yet, and the month before it is missing amendments. Volumes for a recent cycle only ever go up. A chart of monthly statewide production that runs to the edge of the data always shows a cliff, and the cliff is an artefact.
The dataset tells you where its own edge is. The date-range table carries the oldest and newest production cycles in the extract, the newest scheduled cycle, and the dates the gas and oil data were extracted:
SELECT oldest_prod_cycle_year_month,
newest_prod_cycle_year_month,
gas_extract_date,
oil_extract_date
FROM texas.pdq_gp_date_range_cycle;
Read those before you plot anything. Then:
- Drop the most recent two or three cycles from any trend, or mark them explicitly as provisional.
- Never compare a recent month in an old extract to the same month in a new extract and call the difference "growth".
- If you need a stable series, pull the same cycles from successive monthly extracts and watch them converge. That convergence curve is the real lag profile, and it differs by product and by district.
There is also a prod_report_filed_flag on the lease-cycle rows. A lease with no
filed report for a cycle is not a lease that produced nothing; it is a lease you
know nothing about for that month. Treat missing and zero differently.
Pending leases
Production reported for leases that do not yet have an assigned identifier goes into a separate pending-lease report rather than into PDQ. It is small relative to the main dataset but non-zero, and it is the reason the very newest activity can be invisible in the main tables. If you are tracking a brand new development, check it.
Annual field tables
If your question is about fields rather than leases, the annual oil and gas field tables give you a direct answer: report year, district, field name and number, county, multi-county flag, discovery date, oil gravity, total and producing well counts, and annual oil, casinghead gas and total gas volumes. One row per field per year.
They are tiny compared to PDQ and they are already aggregated the way most field-level questions want. Reach for them first and drop to the monthly data only when you need the monthly shape.
Practical checklist
- Cycle keys are text. Filter with quoted
'YYYYMM'strings. - Lease keys need district and oil/gas code to be unique.
- Use the grain-matched table; do not aggregate the biggest table by habit.
- Add condensate to oil and casinghead gas to gas when you say "total".
- Allowables and ending balances are not production.
- Drop or flag the most recent cycles.
- Missing is not zero — check the filed flag.
Next: drilling permits, and the difference between intent and reality.