WeatherNext forecasts on BigQuery

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°
  • 19 gridded surface variables across six precomputed statistical metrics—specifically mean, p10, p25, p50, p75, and p90 (total of 114 metrics, including total precipitation and solar radiation).
  • Hourly timesteps across all inits.
[YOUR_PROJECT_ID].[YOUR_DATASET_ID].weathernext_3_0_0_0p05deg 0.05°
  • High-resolution station head forecasts for 2m temperature and dew point across six precomputed statistical metrics—specifically mean, p10, p25, p50, p75, and p90 (total of 12 metrics).
  • Hourly timesteps across all inits.

(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 (1 to 360 hours for 6-hourly inits, 1 to 48 hours for interim hourly inits):

  • init_time (TIMESTAMP, Partition Key): Forecast initialization timestamp in UTC.
  • geography (GEOGRAPHY): 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.
  • 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 hourly 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 hourly inits) from init_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:

SQL

SELECT *
FROM `YOUR_PROJECT_ID.YOUR_DATASET_ID.weathernext_3_0_0_0p1deg`
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_polygon,
  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_polygon,
    ST_GEOGFROMTEXT('POLYGON((-74.26 40.50, -73.70 40.50, -73.70 40.90, -74.26 40.90, -74.26 40.50))')
  )
  -- 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_polygon,
  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_polygon,
    ST_GEOGFROMTEXT('POLYGON((-74.26 40.50, -73.70 40.50, -73.70 40.90, -74.26 40.90, -74.26 40.50))')
  )
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:

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,
  ST_X(ST_Centroid(t.geography_polygon)) AS longitude,
  ST_Y(ST_Centroid(t.geography_polygon)) 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')
  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_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 by init_time. Always include WHERE 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 than SELECT *.
  • Use BigQuery GIS indexing: When performing spatial lookups or joins, use spatial predicates like ST_INTERSECTS or ST_DWITHIN on geography_polygon or geography to leverage spatial clustering.

Starter guides

For interactive tutorials using Python and the %%bigquery magic command in Colab:


Terms of use

For more details, see Terms of Service and Disclaimers.