From a7121d601b75e1c52428aee3ba3e6c5b91f891cb Mon Sep 17 00:00:00 2001 From: dadams Date: Mon, 18 May 2026 09:04:56 -0700 Subject: [PATCH] Add state grid context and database inventory to DC summary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends the demographic/RUCA/energy summary with two new sections: - §7 quantifies each top-DC state's "share of state capacity within 50 km of a DC," surfacing NJ (83%), NV (75%), TN (70%), and OR (68%) as the most DC-saturated grids — reframing the canonical VA-centric story by structural entanglement rather than raw count. - §9 inventories every table in the data_centers schema with a one-line description, flagging cleanup candidates and unused layers for downstream work. Also renumbers watershed analysis to §8, adds the SEDS row to the dataset coverage table, and narrows next-step #4 to the IM3 projection overlay (now that the SEDS join is complete). Co-Authored-By: Claude Opus 4.7 --- ...enter_demographic_ruca_energy_summary.docx | Bin 23594 -> 28661 bytes ..._center_demographic_ruca_energy_summary.md | 109 +++++++++++++++++- 2 files changed, 106 insertions(+), 3 deletions(-) diff --git a/output/data_center_demographic_ruca_energy_summary.docx b/output/data_center_demographic_ruca_energy_summary.docx index eebca32bde6524fe6b16d7cf98b0488dd4ee04ae..b61ae3cdebfd5eda055995a835fe09eb967516c6 100644 GIT binary patch delta 20179 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 KL(up)-2VaKI;n{O diff --git a/output/data_center_demographic_ruca_energy_summary.md b/output/data_center_demographic_ruca_energy_summary.md index 6c38dc5..48c3b7b 100644 --- a/output/data_center_demographic_ruca_energy_summary.md +++ b/output/data_center_demographic_ruca_energy_summary.md @@ -29,8 +29,9 @@ | `ruca_codes_2020_tract` | 85,528 tracts | `tract_fips_20 = geoid` | 1,826 matched (99.6%) | | `watershed_huc8` | 2,139 watersheds | `ST_Contains(w.geom, m.geom)` | 1,831 matched (99.9%) | | `energy_eia_operating_generator_capacity_flat` | 4.7M rows | `ST_DWithin(geom, 50km)` | 1,831 DCs have ≥1 nearby gen | +| `energy_eia_seds_flat` (annual, 1960–2024) | 2.57M rows | `state_id` | Used in §7 for state electricity consumption (series `ESTCB`, 2024) | -Energy aggregation uses period `2026-02` only with `status='OP'`, summing `nameplate_capacity_mw` for operating generators within 50 km of each DC. Note: EIA capacity columns were added to this table on 2026-05-17 — prior to that the `_flat` table had no MW values despite its name. +Energy aggregation uses period `2026-02` only with `status='OP'`, summing `nameplate_capacity_mw` for operating generators within 50 km of each DC. Note: EIA capacity columns were added to this table on 2026-05-17 — prior to that the `_flat` table had no MW values despite its name. SEDS was backfilled 2026-05-18 (initial smoke-test had only 50 rows). --- @@ -205,7 +206,44 @@ Aggregated across DCs in RUCA 2–10 (i.e. anything outside dense metro core, n= --- -## 7. Watershed (HUC8) concentration +## 7. State grid context — how DC-saturated is each top state? + +Section 6 shows DC-adjacent capacity in absolute MW, which is hard to interpret without knowing the size of the state grid. Using OGC for state-total generating capacity (period `2026-02`, status `OP`) and SEDS series `ESTCB` for 2024 in-state electricity consumption, we can express each state's DC footprint as a **share of its own grid**. + +The "DC-adjacent capacity" column sums distinct in-state generators (i.e., no double-counting) whose 50 km neighborhood includes at least one in-state data center. + +| State | DCs | State grid (GW) | State elec. consumption (TWh, 2024) | DC-adjacent capacity (GW) | **% of state capacity within 50 km of a DC** | +|---|---:|---:|---:|---:|---:| +| VA | 378 | 30.8 | 138.0 | 15.4 | 50% | +| TX | 162 | 194.2 | 505.3 | 61.4 | 32% | +| CA | 147 | 105.1 | 245.6 | 51.6 | 49% | +| **OR** | 145 | 17.2 | 59.7 | 11.7 | **68%** | +| OH | 103 | 34.4 | 153.7 | 12.7 | 37% | +| WA | 93 | 29.6 | 90.0 | 7.9 | 27% | +| AZ | 69 | 40.1 | 90.8 | 22.5 | 56% | +| IA | 65 | 24.6 | 54.9 | 4.9 | 20% | +| **NJ** | 62 | 17.8 | 73.5 | 14.7 | **83%** | +| IL | 61 | 51.7 | 133.2 | 17.4 | 34% | +| GA | 50 | 42.3 | 150.0 | 14.2 | 34% | +| NY | 48 | 42.7 | 140.5 | 25.8 | 61% | +| **NV** | 41 | 18.7 | 40.7 | 14.0 | **75%** | +| **TN** | 32 | 23.3 | 102.9 | 16.4 | **70%** | +| NC | 31 | 38.9 | 136.9 | 17.4 | 45% | + +**The DC-saturation reordering.** Virginia leads in raw DC count (378), but four states have grids where *more than two-thirds* of all in-state generating capacity sits within 50 km of a data center: + +- **New Jersey — 83%.** Effectively the entire state's electrical economy is DC-adjacent. NJ's 62 DCs are NYC-metro carrier hotels concentrated in a small geographic footprint relative to a small state grid (17.8 GW). +- **Nevada — 75%.** Las Vegas and Reno DCs co-locate with the gas-and-solar generation that serves Las Vegas urbanization. NV has a small grid (18.7 GW) and most of it serves the same two metros. +- **Tennessee — 70%.** Nashville + Memphis DCs sit near TVA's central generation belt. +- **Oregon — 68%.** Even though OR's DC cluster is mostly non-metro (Boardman / Hermiston / The Dalles), the Columbia hydro corridor serving them accounts for two-thirds of OR's 17.2 GW grid. This is the only state where the saturation comes from rural hyperscale builds rather than urban carrier hotels. + +**The opposite end.** **Iowa (20%)** has 65 DCs but they all cluster around Council Bluffs / Des Moines, leaving the rural wind belt that dominates IA's grid unrelated to DC siting. **Washington (27%)** is similar — the Quincy hyperscale cluster is small relative to WA's Columbia hydro and Puget-area generation. + +**Why the proportional view matters.** A 1 GW DC load lands very differently on the NJ grid (5.6% of total capacity) than on the TX grid (0.5%). Reliability, transmission-queue interconnection waits, and political pushback all scale with the proportional draw, not the absolute MW. By that yardstick, the canonical "VA dominates US DCs" story is incomplete — VA, NJ, OR, NV, TN, NY, and AZ are the states where the DC industry is *structurally entangled* with the grid, and where any large new build runs into capacity-share constraints first. + +--- + +## 8. Watershed (HUC8) concentration Each DC sits in exactly one USGS HUC8 watershed (8-digit hydrologic unit, subbasin scale, median ~3,000 sq km). Cooling-water draw and wastewater discharge happen at watershed scale, not state scale — a single stressed basin can cap an entire DC corridor regardless of how big the state's overall water budget is. @@ -277,6 +315,71 @@ This watershed view is a **boundary set** for downstream water-stress analysis. --- +## 9. Database inventory (`data_centers` schema `public`) + +All tables in the working database as of 2026-05-18. "Used here" = referenced in §1–§8 of this report. PostGIS internal tables (`spatial_ref_sys`, `geography_columns`, `geometry_columns`) are omitted. + +### Data center inventory and clustering + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `master_data_centers` | 1,833 | ✓ | Unified, deduplicated DC inventory — the canonical row-per-DC table joining curated, OSM, and sample sources via `master_id`. | +| `osm_data_centers` | 1,549 | — | Raw OSM-derived DC features (nodes/ways tagged as data centers), one of the inputs to `master_data_centers`. | +| `us_dc_sample_geocoded` | 1,489 | — | Earlier sample-list DC inventory with geocoding lineage (Nominatim + Census TIGER), superseded by `master_data_centers` but retained for provenance. | +| `data_centers_union` (view) | — | — | Convenience view unioning the curated and OSM source rows with a `source` discriminator. | +| `master_data_center_spatial_clusters` | 1,831 | ✓ | DBSCAN cluster assignment per DC (`cluster_id`, noise flag), used in §3. | + +### Per-DC join tables + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `data_center_census_tracts_2024` | 1,815 | ✓ | One row per DC with attached ACS-2024 demographics from its containing tract — the master demographic join. | +| `data_center_watershed_huc8` | 1,833 | ✓ | One row per DC with its containing USGS HUC8 watershed (`huc8`, name, states, area), built 2026-05-18 via `ST_Within`. | + +### Base geographic / demographic layers + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `_dc_census_tract_acs_2024` | 85,382 | ✓ | Staging: ACS-2024 5-year profile attributes for every US tract that contains a DC (and surrounding tracts for context). | +| `_dc_census_tract_boundaries_2024` | 85,058 | — | Staging: TIGER 2024 tract polygons for the DC-tract universe. | +| `ruca_codes_2020_tract` | 85,528 | ✓ | USDA RUCA 2020 codes per tract, the metro/micropolitan/rural classification used in §4–§5. | +| `watershed_huc8` | 2,139 | ✓ | USGS Watershed Boundary Dataset HUC8 subbasin polygons (median ~3,000 km²) covering CONUS + AK. | +| `_watershed_huc8_stage` | 369 | — | Staging table from an earlier partial WBD load, superseded by `watershed_huc8`. Candidate for cleanup. | +| `census_tract_huc8_link` | 806 | — | Tract↔HUC8 spatial overlap table (with overlap %) for the subset of tracts containing a DC. Useful for downstream tract-level water-stress joins. | + +### Energy data + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `energy_eia_operating_generator_capacity_flat` | 4.7M | ✓ | EIA Form-860 operating generator inventory, monthly 2008–2026, with nameplate / summer / winter MW and point geometry. Source for §6 and §7 capacity figures. | +| `energy_eia_seds_flat` | 2.57M | ✓ | EIA SEDS annual state energy series 1960–2024 (consumption, prices, expenditures by sector / fuel). Source for §7 state electricity consumption (`ESTCB`, 2024). Backfilled 2026-05-18. | +| `energy_atlas_layers_catalog` | ~5 | — | Metadata catalog of EIA layers ingested by `ingest_eia_energy_layers.py` (table name, source URL, import timestamp). | +| `im3_state_projected_moderate_50` | 328 | — | PNNL IM3 projected DC siting under the moderate-growth scenario at gravity-weight 0.50 — one row per projected facility (cost, IT MW, cooling-water demand, lat/lon). Loaded but unused. | +| `im3_projected_state_demand_summary` | 31 | — | State-level rollup of IM3 projected facility counts, IT MW, and cooling demand. Loaded but unused. | +| `seds_national_msn_year` | 0 | — | Empty placeholder for national SEDS time-series; superseded by `energy_eia_seds_flat`. Drop candidate. | +| `seds_state_msn_year` | 0 | — | Empty placeholder for state SEDS time-series; superseded by `energy_eia_seds_flat`. Drop candidate. | +| `utility_rate_tracker_2025_2028` | 374 | — | Utility rate-increase tracker by provider × state × service type, with effective dates and monthly $ + % increases. Loaded but unused in the demographic/energy analysis. | + +### Connectivity (submarine cables, exchange capacity) + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `internet_cables` | 693 | — | Submarine cable routes (geometry, RFS year, decommission year, owners, length km) from TeleGeography-style data. | +| `internet_cable_landing_points` | 3,361 | — | Cable landing points (country, name, TBD flag) — endpoint nodes for `internet_cables`. | +| `internet_cable_meta` | 2 | — | Source-provenance metadata for the cable dataset (key/value). | +| `internet_cable_year_summaries` | 58 | — | Year-by-year narrative descriptions of cable activity. | +| `internet_city_dominance` | 4,552 | — | City-level physical capacity (Tbps), logical-dominance IP count, and top ASNs — proxy for internet-hub strength of each candidate DC city. | + +### Other + +| Table | Rows | Used here | Description | +|---|---:|:-:|---| +| `opposition_cases_geocoded` | 18 | — | Geocoded community-opposition cases against DC builds (developer, investment $B, outcome, governance response). Loaded but unused — see next-steps item #5. | + +**Cleanup candidates.** `_watershed_huc8_stage`, `seds_national_msn_year`, `seds_state_msn_year`, and possibly `us_dc_sample_geocoded` are superseded by their canonical counterparts and could be dropped to reduce confusion. + +--- + ## Data quality flags 1. **`master_data_centers.power_mw` is populated for only 108 / 1,833 DCs (5.9%).** Useless as a sizing metric without imputation or alternative source. Nearby EIA capacity is the more reliable proxy (used as the per-DC scale in this analysis). A grant-funded scrape of Baxtel / Data Center Map would close this gap. @@ -293,5 +396,5 @@ This watershed view is a **boundary set** for downstream water-stress analysis. 1. **Backfill `power_mw`** from Baxtel / Data Center Map (paid scrape — grant work). 2. **Operator-string deduplication** — collapse "Meta"/"Meta, Inc.", "AWS" variants, etc., before any per-operator analysis. 3. **Water-stress overlay against the 257 watersheds** — now that the HUC8 join is in place, pull USGS WaterWatch streamflow data, USGS water-use estimates, or EPA drought-status indicators against this watershed set. A single stress index per HUC8 would size the entire US fleet's water exposure. -4. **State-level energy demand context** — `im3_state_projected_moderate_50` and `seds_state_msn_year` are loaded; joining these would let us compute "DC nearby capacity as share of state grid" rather than absolute MW. +4. **Forward-projected demand overlay** — the static SEDS / OGC capacity-share view in §7 is a snapshot. Joining `im3_state_projected_moderate_50` against the §7 saturation table would let us flag which already-saturated states (NJ, NV, TN, OR) are projected to need the most additional generation before 2050. 5. **Opposition cases overlay** — `opposition_cases_geocoded` is loaded but unused; could test whether cluster-vs-isolated demographic differences (or watershed concentration) predict community opposition.