WeatherNext 3 forecast data is available in Google BigQuery using the BigQuery Analytics Hub listing. BigQuery provides precomputed surface ensemble statistics, allowing you to run standard SQL analytics, execute geospatial joins with business data, and power BI dashboards without managing infrastructure.
What is BigQuery?
Google BigQuery is a serverless cloud data warehouse with built-in machine learning and geospatial analytics (BigQuery GIS). It enables petabyte-scale SQL queries, joins with enterprise datasets (like retail stores, customer locations, or supply chains), and direct integration with Looker, DataFrames, and Pandas.
Available datasets & tables
WeatherNext 3 is distributed through the WeatherNext 3 BigQuery Analytics Hub listing.
When you subscribe to the listing, the tables are linked into your Google Cloud
project dataset (e.g., [YOUR_PROJECT_ID].[YOUR_DATASET_ID]). The data is
split into two tables by spatial grid resolution:
| Table Name | Grid Resolution | Variables & Scope |
|---|---|---|
[YOUR_PROJECT_ID].[YOUR_DATASET_ID].weathernext_3_0_0_0p1deg |
0.1° |
|
[YOUR_PROJECT_ID].[YOUR_DATASET_ID].weathernext_3_0_0_0p05deg |
0.05° |
|
(For the raw 64-member ensemble and 3D atmospheric pressure levels, use Google Cloud Storage (Zarr)).
Table structure & schema
Both tables are partitioned by init_time and clustered by geography. Each
row represents a geographic grid location with its initialization time
(init_time), and contains a repeated forecast record spanning lead times:
- 6-hourly inits (00, 06, 12, 18 UTC): 1 to 360 hours.
- Interim inits: 1 to 48 hours.
- 2026 to present: every hour (01–05, 07–11, 13–17, 19–23 UTC)
- 2024–2025: 03, 09, 15, 21 UTC only
Each row contains the following columns:
init_time(TIMESTAMP, Partition Key): Forecast initialization timestamp in UTC.geography(GEOGRAPHY, Cluster Key): The geographic center point location for this grid cell.geography_polygon(GEOGRAPHY): The geographic bounding polygon (0.1° or 0.05° cell) associated with the forecast. Use it for display or exact containment checks; filter ongeographyto benefit from clustering.forecast(RECORD, REPEATED): Contains detailed forecast records across lead time horizons (1 to 360 hours for 6-hourly inits, 1 to 48 hours for interim inits).time(TIMESTAMP): Valid UTC prediction timestamp for this forecast step.hours(INTEGER): Forecast lead time in hours (1 to 360 for 6-hourly inits, 1 to 48 for interim inits) frominit_time.- Distribution Statistics: Every variable provides 6 precomputed
ensemble metrics:
_mean,_p10,_p25,_p50,_p75,_p90.
Common query recipes
Explore standard SQL query patterns for WeatherNext datasets in BigQuery:
1. Inspect table schema and sample record
Query a single row from the 0.1° dataset. LIMIT alone does not reduce the
bytes billed, so filter on init_time and geography to keep the scan small.
To view the schema without running a query, open the table's Schema tab in
the BigQuery console.
SQL
SELECT *
FROM `YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p1deg`
WHERE
init_time = TIMESTAMP('2026-08-26 00:00:00 UTC')
AND ST_DWITHIN(geography, ST_GEOGPOINT(-74.0060, 40.7128), 8000)
LIMIT 1;
2. Point forecast time series (0.1° gridded table)
Extract an hourly surface temperature and wind forecast (with 10th and 90th percentile distribution) for a bounding area or coordinate (e.g., New York City):
SQL
SELECT
t.geography,
f.time AS forecast_time,
f.hours AS forecast_hour,
-- Temperature converted from Kelvin to Celsius
f.temperature_2m_mean - 273.15 AS temp_mean_c,
f.temperature_2m_p10 - 273.15 AS temp_p10_c,
f.temperature_2m_p90 - 273.15 AS temp_p90_c,
-- 10m Wind speed in m/s
f.wind_speed_10m_mean AS wind_speed_mps,
-- 1-hour total precipitation in mm (total_precipitation_1hr in m * 1000)
f.total_precipitation_1hr_mean * 1000 AS precip_1hr_mm
FROM
`YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p1deg` AS t,
t.forecast AS f
WHERE
-- Partition filter avoids full-table scan
t.init_time = TIMESTAMP('2026-08-26 00:00:00 UTC')
-- Select NYC region
AND ST_INTERSECTS(
t.geography,
ST_GEOGFROMTEXT('POLYGON((-74.31 40.45, -73.65 40.45, -73.65 40.95, -74.31 40.95, -74.31 40.45))')
)
-- 5-day forecast horizon (120 hours)
AND f.hours <= 120
ORDER BY
f.time ASC;
3. High-resolution station point forecast (0.05° table)
Query the dedicated 0.05° station observational head for ground-truth-calibrated temperature and dew point:
SQL
SELECT
t.geography,
f.time AS forecast_time,
f.hours AS forecast_hour,
f.station_head_temperature_2m_mean - 273.15 AS station_temp_mean_c,
f.station_head_temperature_2m_p10 - 273.15 AS station_temp_p10_c,
f.station_head_temperature_2m_p90 - 273.15 AS station_temp_p90_c,
f.station_head_dewpoint_temperature_2m_mean - 273.15 AS station_dewpoint_c
FROM
`YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p05deg` AS t,
t.forecast AS f
WHERE
t.init_time = TIMESTAMP('2026-08-26 00:00:00 UTC')
AND ST_INTERSECTS(
t.geography,
ST_GEOGFROMTEXT('POLYGON((-74.285 40.475, -73.675 40.475, -73.675 40.925, -74.285 40.925, -74.285 40.475))')
)
ORDER BY
f.time ASC;
4. Global / Regional spatial snapshot
Retrieve global ensemble mean variables at a specific lead time (e.g., 6 hours
after initialization) for geospatial mapping. To limit the snapshot to a region,
uncomment the geography filter:
SQL
SELECT
f.u_component_of_wind_10m_mean,
f.v_component_of_wind_10m_mean,
f.temperature_2m_mean,
f.mean_sea_level_pressure_mean,
f.sea_surface_temperature_mean,
f.total_precipitation_1hr_mean,
-- `geography` is the cell center point
ST_X(t.geography) AS longitude,
ST_Y(t.geography) AS latitude
FROM
`YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p1deg` AS t,
t.forecast AS f
WHERE
t.init_time = TIMESTAMP('2026-08-26 00:00:00 UTC')
-- Optional: restrict to a region (e.g., contiguous US)
-- AND ST_INTERSECTS(
-- t.geography,
-- ST_GEOGFROMTEXT('POLYGON((-125 24, -66 24, -66 50, -125 50, -125 24))')
-- )
AND f.time = TIMESTAMP('2026-08-26 06:00:00 UTC');
5. Spatial join with business locations
Join weather forecasts directly with a table of retail stores, facilities, or asset coordinates:
SQL
SELECT
stores.store_id,
stores.store_name,
f.time AS forecast_time,
f.temperature_2m_mean - 273.15 AS temp_mean_c,
f.wind_speed_10m_mean AS wind_speed_mps,
f.total_precipitation_1hr_mean * 1000 AS precip_mm
FROM
`YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p1deg` AS weather,
weather.forecast AS f
JOIN
`YOUR_PROJECT_ID.retail_data.store_locations` AS stores
ON
ST_DWITHIN(weather.geography, stores.location_geog, 8000)
AND ST_INTERSECTS(weather.geography_polygon, stores.location_geog)
WHERE
weather.init_time = TIMESTAMP('2026-08-26 00:00:00 UTC')
AND f.time = TIMESTAMP('2026-08-27 00:00:00 UTC');
Best practices for performance & cost
- Always filter by
init_time: The table is partitioned byinit_time. Always includeWHERE init_time = ...to prune partition scans and minimize cost. - Select specific columns: Query only the statistical columns you need
(e.g.,
f.temperature_2m_mean,f.wind_speed_10m_mean) rather thanSELECT *. - Use BigQuery GIS indexing: When performing spatial lookups or joins,
use spatial predicates like
ST_INTERSECTSorST_DWITHINongeographyto leverage spatial clustering.
Starter guides
For interactive tutorials using Python and the %%bigquery magic command in
Colab:
Terms of use
- Real-Time Data (data relating to less than 1 hour ago and the future): Governed by the GDM Real-Time Weather Forecasting Experimental Data Terms of Use.
- Historical Data (data relating to 1 hour ago or more): Licensed under CC BY 4.0.
For more details, see Terms of Service and Disclaimers.