Planetary-scale answers, unlocked.
A Hands-On Guide for Working with Large-Scale Spatial Data. Learn more.
Authors
The High-Resolution Rapid Refresh (HRRR) model is a numerical weather prediction (NWP) model from the National Oceanic and Atmospheric Administration (NOAA). It runs every hour on a 3 km grid over the contiguous United States, with an Alaska domain every three hours. Each run starts from the latest radar, satellite, aircraft, and surface observations and produces an 18-hour forecast, extended to 48 hours on the 00, 06, 12, and 18 UTC runs. HRRR is a convection-allowing model: its grid is fine enough to represent individual thunderstorms. Forecasters use it as short-range guidance for severe weather, aviation, wildfire smoke, and renewable energy.
The archive back to 2014 is public on AWS. This article tests one claim: the hard part of using HRRR in spatial analysis is format. One day of output is 886 GB in 2,184 files of GRIB2, the binary format weather centers use for gridded forecasts. WherobotsDB reads its values only after conversion. The warnings that the National Weather Service (NWS) issued from that guidance are already a table in the Havasu catalog, NWS watches and warnings.
The HRRR is a regional, hourly updated forecast system developed at NOAA's Global Systems Laboratory (GSL) in Boulder and run operationally at the National Centers for Environmental Prediction (NCEP). It became an operational NCEP model on 30 September 2014, after several years as an experimental system. Dowell and colleagues describe it in The High-Resolution Rapid Refresh (HRRR): An Hourly Updating Convection-Allowing Forecast Model. Part I (Weather and Forecasting, 2022). It runs WRF-ARW, the Advanced Research version of the Weather Research and Forecasting (WRF) model, at storm scale over the conterminous United States and Alaska. New observations enter every hour.
At 3 km, thunderstorms, squall lines, sea breezes, and mountain winds appear in the grid itself. The forecast stops at 18 or 48 hours, so HRRR covers this afternoon and tonight, and global models cover the days beyond.
The current operational version is HRRR version 4 (HRRRv4), implemented on 2 December 2020. Version 3 (July 2018) added the Alaska domain and 36-hour runs every six hours, and version 4 extended those runs to 48 hours.
The HRRR grid over the contiguous United States (CONUS) is a Lambert conformal conic projection of 1,799 by 1,059 points at 3 km spacing. It is centered on 97.5°W with standard parallels at 38.5°N, as listed in the Herbie HRRR documentation. Each cell represents about 9 square kilometers. Spatial work in a geographic or web projection first reprojects this grid to another coordinate reference system.
Coarser models cannot resolve thunderstorm updrafts, so they estimate convection with a parameterization scheme. Below about 4 km, the model equations represent storms directly. Weisman, Skamarock, and Klemp showed that 4 km grid spacing reproduces much of the mesoscale structure of squall lines (Monthly Weather Review, 1997). Kain and colleagues compared 2 km and 4 km WRF forecasts in the first generation of operational convection-allowing NWP (Weather and Forecasting, 2008). HRRR runs at 3 km with no deep convective parameterization. Its dynamical core, the part that solves the equations of air motion, is WRF-ARW. Skamarock and Klemp described it in A time-split nonhydrostatic atmospheric model for weather research and forecasting applications (Journal of Computational Physics, 2008). Its cloud microphysics, the rules for how rain, snow, and ice form in clouds, follow the aerosol-aware scheme of Thompson and Eidhammer (2014).
Data assimilation combines a short model forecast with new observations to produce the best estimate of the current atmosphere, the analysis that each forecast starts from. HRRR builds each starting state this way:
Forecast hours 0 to 18 are each written as four GRIB2 files, and hours 19 to 48 of the extended runs as three (no wrfsubh). Files are named hrrr.tHHz.wrfPRODUCTfFF.grib2 for cycle HH and forecast hour FF:
hrrr.tHHz.wrfPRODUCTfFF.grib2
HH
FF
HRRR variables follow the GRIB2 short names. Common ones are TMP (temperature), DPT (dewpoint), UGRD and VGRD (east-west and north-south wind), GUST (wind gust), and REFC (composite reflectivity, the model's strongest simulated radar echo in each column). Others are APCP (accumulated precipitation), CAPE, and MXUPHL (maximum updraft helicity, a sign of rotating storms called supercells). The list continues with VIS (visibility), DSWRF (downward shortwave radiation for solar), and MASSDEN (near-surface smoke). Each GRIB2 message holds one variable at one level and one time. A companion .idx file lists the byte offset of every message, so a client can fetch a single field with an HTTP range request.
TMP
DPT
UGRD
VGRD
GUST
REFC
APCP
CAPE
MXUPHL
VIS
DSWRF
MASSDEN
.idx
noaa-hrrr-bdp-pds
hrrrzarr
Blaylock, Horel, and Liston described the first cloud archive of HRRR output in Cloud archiving and data mining of High-Resolution Rapid Refresh forecast model output (Computers and Geosciences, 2017).
The RAP is HRRR's parent, with the same hourly cycle on a 13 km grid over a larger domain. NOAA's Environmental Modeling Center documents both. The Global Forecast System runs on the Finite-Volume Cubed-Sphere (FV3) dynamical core. The North American Mesoscale model's 3 km CONUS nest matches HRRR's spacing but runs 4 times a day. NOAA plans to retire the NAM when the RRFS goes operational.
HRRR is most accurate in its first hours. James and colleagues documented HRRR forecast performance across versions (2022). Their verification covers simulated radar reflectivity, precipitation, 2 m temperature and dewpoint, 10 m wind, cloud ceiling, and visibility. Dowell and colleagues attribute the gains in reflectivity and precipitation forecasts since 2014 to better data assimilation and physics.
Any single run is limited in storm placement, lead time, and spread:
WherobotsDB reads the public HRRR archive on AWS in place with the Spark text and binaryFile readers. The Wherobots catalogs hold no HRRR table. The WherobotsDB raster readers, RS_FromPath and RS_FromNetCDF, take GeoTIFF and NetCDF. Forecast values therefore reach WherobotsDB after a conversion to Cloud Optimized GeoTIFF or NetCDF.
text
binaryFile
The running example is the night of 10 to 11 December 2021. It uses the 00 UTC HRRR run of 11 December, whose forecast hours span the hours the long-track tornado was on the ground (02:49 to 05:47 UTC). The queries read these sources:
noaa.nws_watch_warnings
us_census.tiger_county
us_census.acs_5yr_estimates
One engine read all of them with SQL.
-- HRRR CONUS GRIB2 files for 11 December 2021, by product, plus a total row -- binaryFile lists path and length; the file contents are never read SELECT regexp_extract(path, 'z\\.(wrf[a-z]+)f[0-9]{2}\\.grib2$', 1) AS product, COUNT(*) AS files, COUNT(DISTINCT regexp_extract(path, 'hrrr\\.t([0-9]{2})z', 1)) AS cycles, ROUND(SUM(length) / 1e9, 1) AS gb FROM binaryFile.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t*z.wrf*.grib2` GROUP BY ROLLUP(1) ORDER BY 1;
One day of HRRR CONUS output is 2,184 GRIB2 files and 886.2 GB; the query took 25 seconds. Two more queries check the schedule and the levels:
-- Surface files per cycle: the last forecast hour shows which cycles run to 48 hours SELECT CAST(regexp_extract(path, 'hrrr\\.t([0-9]{2})z', 1) AS INT) AS cycle_utc, COUNT(*) AS files, MAX(CAST(regexp_extract(path, 'wrfsfcf([0-9]{2})', 1) AS INT)) AS last_forecast_hour FROM binaryFile.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t*z.wrfsfcf*.grib2` GROUP BY 1 ORDER BY 1; -- Messages and levels in the three main files of forecast hour 3 SELECT 'wrfprs' AS product, COUNT(*) AS messages, COUNT(DISTINCT CASE WHEN split(value, ':')[3] = 'TMP' AND split(value, ':')[4] LIKE '% mb' THEN split(value, ':')[4] END) AS levels_or_names FROM text.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t00z.wrfprsf03.grib2.idx` UNION ALL SELECT 'wrfnat', COUNT(*), COUNT(DISTINCT CASE WHEN split(value, ':')[3] = 'TMP' AND split(value, ':')[4] LIKE '% hybrid level' THEN split(value, ':')[4] END) FROM text.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t00z.wrfnatf03.grib2.idx` UNION ALL SELECT 'wrfsfc', COUNT(*), COUNT(DISTINCT split(value, ':')[3]) FROM text.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t00z.wrfsfcf03.grib2.idx`;
The 00, 06, 12, and 18 UTC cycles have 49 surface files each, forecast hours 0 to 48. The other 20 cycles have 19 files each, hours 0 to 18. At forecast hour 3, the pressure-level file holds 711 messages with temperature on 40 pressure levels. The native-level file holds 1,136 messages with temperature on 50 hybrid model levels. The surface file holds 173 messages under 97 distinct variable names.
-- Byte ranges of selected fields in the 00 UTC run, forecast hour 3 (valid 03 UTC, 11 December 2021) WITH idx AS ( SELECT CAST(split(value, ':')[0] AS INT) AS msg, CAST(split(value, ':')[1] AS BIGINT) AS start_byte, split(value, ':')[3] AS variable, split(value, ':')[4] AS level FROM text.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t00z.wrfsfcf03.grib2.idx` ), f AS ( SELECT length AS file_bytes FROM binaryFile.`s3://noaa-hrrr-bdp-pds/hrrr.20211211/conus/hrrr.t00z.wrfsfcf03.grib2` ), sized AS ( -- A message ends where the next one starts; the last one ends at the end of the file SELECT /*+ BROADCAST(f) */ i.*, f.file_bytes, COALESCE(LEAD(start_byte) OVER (ORDER BY msg), f.file_bytes) - start_byte AS bytes FROM idx i CROSS JOIN f ) SELECT msg, variable, level, start_byte, bytes, ROUND(100.0 * bytes / file_bytes, 2) AS pct_of_file FROM sized WHERE (variable, level) IN (('REFC', 'entire atmosphere'), ('MXUPHL', '5000-2000 m above ground'), ('GUST', 'surface'), ('CAPE', 'surface'), ('TMP', '2 m above ground'), ('UGRD', '10 m above ground'), ('APCP', 'surface'), ('MASSDEN', '8 m above ground')) ORDER BY msg;
The file is 149,002,436 bytes, and dropping the WHERE clause lists all 173 messages. Composite reflectivity (REFC) is message 1, bytes 0 to 490,253, which is 0.33% of the file. The 2 to 5 km updraft helicity field (MXUPHL), the field forecasters scan for rotating storms, is 29,408 bytes.
WHERE
The NWS warning polygons record where forecasters issued severe weather warnings, with HRRR among their guidance. Warnings are forecasts too. These counts measure exposure to warnings and leave HRRR unscored. The query below takes every tornado warning issued from 18 UTC on 10 December to 12 UTC on 11 December. It joins each warning to the US Census county boundaries it touched. It adds each county's population from the American Community Survey and counts the 3 km HRRR cells per county.
-- Tornado warnings per county, 10 to 11 December 2021, with population and HRRR cell count WITH tor AS ( SELECT WFO, ETN, ISSUED, DAMAGETAG, geometry FROM wherobots_open_data.noaa.nws_watch_warnings WHERE VTEC_YEAR = 2021 AND PHENOM = 'TO' AND SIG = 'W' AND ISSUED >= TIMESTAMP '2021-12-10 18:00:00' AND ISSUED < TIMESTAMP '2021-12-11 12:00:00' ), pop AS ( SELECT geoid, estimate AS population FROM wherobots_open_data.us_census.acs_5yr_estimates WHERE table_id = 'B01003' AND variable = 'B01003_001' AND geo_level = 'county' ), per_county AS ( -- 146 warning polygons, broadcast to every county partition and indexed with an R-tree SELECT /*+ BROADCAST(t) */ c.GEOID, c.NAMELSAD, c.STATEFP, ROUND(ST_AreaSpheroid(c.geometry) / 9e6) AS hrrr_cells, -- 3 km x 3 km = 9 km2 COUNT(*) AS warnings, MAX(CASE WHEN t.DAMAGETAG = 'CATASTROPHIC' THEN 1 ELSE 0 END) AS catastrophic, MIN(t.ISSUED) AS first_warning FROM wherobots_open_data.us_census.tiger_county c JOIN tor t ON ST_Intersects(c.geometry, t.geometry) GROUP BY c.GEOID, c.NAMELSAD, c.STATEFP, c.geometry ) SELECT pc.*, p.population FROM per_county pc LEFT JOIN pop p ON p.geoid = pc.GEOID ORDER BY warnings DESC, population DESC;
The query returns in about 6 seconds. The summary query reuses the three named subqueries above, each a common table expression (CTE), and replaces the final SELECT:
SELECT
-- Same tor, pop and per_county CTEs as above, then: SELECT (SELECT COUNT(*) FROM tor) AS tornado_warnings, (SELECT COUNT(DISTINCT WFO) FROM tor) AS nws_offices, (SELECT SUM(CASE WHEN DAMAGETAG = 'CATASTROPHIC' THEN 1 ELSE 0 END) FROM tor) AS catastrophic_warnings, (SELECT SUM(CASE WHEN DAMAGETAG = 'CONSIDERABLE' THEN 1 ELSE 0 END) FROM tor) AS considerable_warnings, (SELECT ROUND(SUM(ST_AreaSpheroid(geometry)) / 1e6) FROM tor) AS warned_km2_with_overlap, (SELECT ROUND(ST_AreaSpheroid(ST_Union_Aggr(geometry)) / 1e6) FROM tor) AS warned_km2_union, COUNT(*) AS counties, COUNT(DISTINCT substr(pc.GEOID, 1, 2)) AS states, SUM(p.population) AS population_in_counties, SUM(pc.catastrophic) AS catastrophic_counties, SUM(CASE WHEN pc.catastrophic = 1 THEN p.population ELSE 0 END) AS population_in_catastrophic_counties, SUM(CASE WHEN pc.warnings >= 5 THEN 1 ELSE 0 END) AS counties_with_5_plus FROM per_county pc LEFT JOIN pop p ON p.geoid = pc.GEOID;
Graves County, Kentucky, home of Mayfield, had 4 tornado warnings, one with the catastrophic tag. It has 36,630 residents and about 160 HRRR grid cells. A zonal statistic, such as a mean, summarizes the grid cells inside a zone; for Graves County it averages about 160 HRRR values. A 12 km grid cell covers 16 times the area of a 3 km cell, which is why HRRR resolution matters at the county scale and below.
Grouping the same warnings by issue hour lines them up with the forecast files of the 00 UTC run. Warnings peaked at 24 in the 02 UTC hour (forecast hour 2). The 7 catastrophic-tag warnings were issued between 02 and 05 UTC, inside forecast hours 2 to 4.
-- Tornado warnings per issue hour, labeled with the forecast hour of the 00 UTC HRRR run SELECT date_trunc('hour', ISSUED) AS issue_hour_utc, (unix_timestamp(date_trunc('hour', ISSUED)) - unix_timestamp(TIMESTAMP '2021-12-11 00:00:00')) / 3600 AS hrrr_00z_forecast_hour, COUNT(*) AS warnings, SUM(CASE WHEN DAMAGETAG = 'CATASTROPHIC' THEN 1 ELSE 0 END) AS catastrophic, SUM(CASE WHEN DAMAGETAG = 'CONSIDERABLE' THEN 1 ELSE 0 END) AS considerable FROM wherobots_open_data.noaa.nws_watch_warnings WHERE VTEC_YEAR = 2021 AND PHENOM = 'TO' AND SIG = 'W' AND ISSUED >= TIMESTAMP '2021-12-10 18:00:00' AND ISSUED < TIMESTAMP '2021-12-11 12:00:00' GROUP BY 1, 2 ORDER BY 1;
A Wherobots Job Run, a script run on a schedule, produces HRRR values per county or building. It fetches the needed fields by byte range. It converts each field to a Cloud Optimized GeoTIFF or NetCDF file. It appends the file to a Havasu table partitioned by cycle and forecast hour. RS_NetCDFInfo lists a converted file's variables. RS_ZonalStats then returns the maximum updraft helicity or gust per county from the join above. RS_Value samples the field at building footprints from Overture buildings. WherobotsDB runs raster and vector data in one engine; most stacks pick one. Forecast, warnings, and population can sit in one SQL query, the pattern of how to score every building in a state for catastrophe risk.
Through the Wherobots Model Context Protocol (MCP) Server, AI agents run the same queries. The models people use every day were trained on text, documents, databases, and the internet. The county join adds which counties and how many people were under a warning.
Hourly updated forecasting at NOAA began with the Rapid Update Cycle. Benjamin and colleagues described its one-hour cycle and its three-dimensional variational (3D-Var) assimilation in An hourly assimilation-forecast cycle: the RUC (Monthly Weather Review, 2004). The RAP replaced it in 2012 with a North American domain, the WRF-ARW model, and GSI assimilation. HRRR nested a 3 km storm-scale model inside that cycle.
Convection-allowing models changed severe weather forecasting. Their output shows storm structure that forecasters can read: a supercell's updraft helicity track, a squall line's leading edge, a bow echo. The open problem is predictability. Forecasts of individual storm cells lose skill within hours. Researchers moved toward ensembles and toward scores that credit a nearby storm. Stensrud and colleagues set the next goal, short ensemble forecasts that extend warning lead times, in Convective-scale warn-on-forecast system: a vision for 2020 (BAMS, 2009).
The Rapid Refresh Forecast System is NOAA's successor to the current regional models. Version 1 runs a 3 km grid over all of North America on the Unified Forecast System's FV3 dynamical core, as described on the RRFS version 1 page. It makes 18-hour forecasts every hour and 84-hour forecasts every six hours, and adds the RRFS Ensemble Forecast System (REFS). NWS Service Change Notice 26-48 announced the RRFS and REFS implementation, first for 31 August 2026 and then for 6 October. The 2 October 2026 update set it for 3 November 2026. RRFS and REFS replace the NAM, the High-Resolution Ensemble Forecast (HREF), the Short-Range Ensemble Forecast (SREF), and the High-Resolution Window Forecast System (HiresW). In the Q&A notes of the June 2026 NWS webinar on RRFS, NOAA stated that the RAP and HRRR will not be retired at this time.
Abdi and colleagues trained a data-driven emulator of HRRR called HRRRCast at 6 km over CONUS (Artificial Intelligence for the Earth Systems, 2026). An emulator is a neural network that imitates a physics model's output; HRRRCast has ResNet and graph neural network variants. A trained emulator runs in seconds, which makes large ensembles affordable. The open questions are extremes, physical consistency, and how to verify a model trained on another model's output. HRRR's public archive supplies the training data.
One day of CONUS output is 886.2 GB of GRIB2, so analysis over years of HRRR needs many machines working in parallel. Joining a forecast grid to millions of buildings, parcels, or circuits is a raster-vector spatial join. It repeats for every cycle and forecast hour. Jia Yu, Jinxuan Wu, and Mohamed Sarwat introduced distributed spatial processing on Apache Spark with GeoSpark (ACM SIGSPATIAL 2015). Yu, Zhang, and Sarwat described its spatial partitioning, indexing, and join design in Spatial data management in Apache Spark: the GeoSpark perspective and beyond (GeoInformatica, 2019). GeoSpark became Apache Sedona, the engine under WherobotsDB. Raster processing at scale explains how WherobotsDB reads only the tiles a query needs from rasters stored outside the database.
The evidence shows that HRRR is an hourly 3 km storm forecast. The hard part of using it in spatial analysis is its GRIB2 file format.
Join NOAA warnings, HRRR inventories, and census boundaries in one SQL query with a Wherobots free trial at cloud.wherobots.com.
The HRRR, or High-Resolution Rapid Refresh, is NOAA’s hourly updated weather forecast model for the United States. It runs on a 3 km grid over the contiguous US every hour and over Alaska every three hours. Each run starts from the latest radar, satellite, aircraft, and surface observations. Developed at NOAA’s Global Systems Laboratory, it has run operationally at NCEP since 30 September 2014.
Not yet. HRRRv4, implemented on 2 December 2020, is the current operational version. NOAA’s Rapid Refresh Forecast System (RRFS) is a 3 km system covering all of North America, with an ensemble called REFS. It is scheduled to go operational on 3 November 2026 and replaces the NAM, HREF, SREF, and HiresW. NOAA has said the RAP and HRRR will not be retired at this time.
HRRR is most accurate in the first few forecast hours and for features its 3 km grid resolves. Its reflectivity, precipitation, temperature, dewpoint, wind, ceiling, and visibility forecasts improved across versions 1 to 4, as documented by James and colleagues in Weather and Forecasting (2022). Exact storm placement and timing remain uncertain. Forecasters compare consecutive hourly runs. They verify with neighborhood scores such as the fractions skill score, which give credit for a storm forecast near the right place.
HRRR runs every hour. Every run covers forecast hours 0 to 18, and the 00, 06, 12, and 18 UTC runs extend to 48 hours. On 11 December 2021, the AWS archive holds 49 surface files for each of those four cycles and 19 for each of the other 20. A sub-hourly file adds 15-minute surface fields for the first 18 hours, and HRRR Alaska runs every three hours.
HRRR has 3 km horizontal grid spacing, so each grid cell covers about 9 square kilometers. That is fine enough to represent individual thunderstorms. The CONUS grid is 1,799 by 1,059 points on a Lambert conformal projection, with 50 native vertical levels and output on 40 pressure levels. Output is hourly, with a 15-minute sub-hourly product for surface fields.
HRRR data is free through the NOAA Open Data Dissemination program. On AWS the GRIB2 bucket is noaa-hrrr-bdp-pds, with an archive back to 2014, and Google Cloud and Azure mirror it. The University of Utah publishes a Zarr version in the hrrrzarr bucket. NOMADS at nomads.ncep.noaa.gov serves the most recent days, and every GRIB2 file has an .idx file that allows single-field downloads by byte range.
HRRR is a regional model at 3 km over the United States with hourly runs and 18 to 48 hour forecasts. GFS, the Global Forecast System, covers the whole globe at about 13 km, runs four times a day, and forecasts 16 days ahead. HRRR resolves individual storms. GFS resolves large-scale weather systems and estimates storms with a formula (convective parameterization).
Domain, resolution, update rate, and range. GFS is global at about 13 km, updates four times a day, and runs to 16 days. HRRR covers the contiguous US and Alaska at 3 km and updates every hour. It runs to 18 hours, or 48 hours four times a day. Use GFS for the next week and HRRR for the next hours, especially for thunderstorms, wind, and smoke.
The Rapid Refresh (RAP) is HRRR’s parent model. Both update hourly. The RAP runs at 13 km over North America and estimates storms with a formula, called convective parameterization. HRRR runs at 3 km over the US and starts from the RAP. It adds radar data every 15 minutes and resolves storms directly.
The NAM runs a 12 km North American parent domain to 84 hours and 3 km nests to 60 hours, four times a day. HRRR runs at 3 km every hour to 18 or 48 hours. The NAM is scheduled for retirement when the RRFS goes operational.
HRRR-Smoke is the HRRR configuration that adds wildfire smoke and carries it through the forecast. It estimates smoke emissions from fire radiative power, the heat output of fires measured by satellites. Its near-surface smoke field (MASSDEN) and vertically integrated smoke are the source of public HRRR smoke maps and forecasts.
What is a Geofence? How Geofencing Works, With Examples
A geofence is a virtual boundary that triggers an action when a device enters or leaves it. How geofencing works, its uses and limits, and a test on ship data.
What is Map Matching? GPS Traces, Methods and Examples
Map matching places each GPS record on the road a vehicle drove. How it works, nearest-road snapping vs hidden Markov models, and a test on Ann Arbor drives.
Geospatial Big Data: Why Analytics Is Hard to Scale
Teams struggle to scale geospatial analytics for five reasons: data volume, mixed formats, many coordinate systems, spatial joins and pipeline upkeep.
share this article
Awesome that you’d like to share our articles. Where would you like to share it to: