WeatherNext 3 forecast data is available in [Google
BigQuery](https://cloud.google.com/bigquery) using the [BigQuery Analytics Hub
listing](https://console.cloud.google.com/bigquery/analytics-hub/discovery/projects/gcp-public-data-weathernext/locations/us/dataExchanges/weathernext_19397e1bcb7/listings/weathernext_3_1a067c1e929).
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.

> [!NOTE]
> To request access to WeatherNext BigQuery listings, submit the
> [WeatherNext
> Data Request form](https://docs.google.com/forms/d/e/1FAIpQLSeCf1JY8G78UDWzbm0ly9kJxfSjUIJT5WyMR_HiNqCm-IHIBg/viewform). Requests are typically approved within 5--7 business
> days.

## What is BigQuery?

[Google BigQuery](https://cloud.google.com/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](https://console.cloud.google.com/bigquery/analytics-hub/discovery/projects/gcp-public-data-weathernext/locations/us/dataExchanges/weathernext_19397e1bcb7/listings/weathernext_3_1a067c1e929).
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. - 24 inits per day from 2026 to present; 8 per day for 2024--2025. |
| `[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. - 24 inits per day from 2026 to present; 8 per day for 2024--2025. |
|---|---|---|

*(For the raw 64-member ensemble and 3D atmospheric pressure levels, use [Google
Cloud Storage (Zarr)](https://developers.google.com/weathernext/guides/gcs)).*

### 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 on `geography` to 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) from `init_time`.
  - **Distribution Statistics:** Every variable provides 6 precomputed ensemble metrics: `_mean`, `_p10`, `_p25`, `_p50`, `_p75`, `_p90`.

> [!NOTE]
> **Note:** Both tables are partitioned by `init_time`
> and clustered by `geography`. Filter on both in your
> `WHERE` clause to limit the data scanned and reduce cost.

*** ** * ** ***

## 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.

<br />

**SQL**

<br />

    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;

<br />

<br />

### 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):

<br />

**SQL**

<br />

    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;

<br />

<br />

### 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:

<br />

**SQL**

<br />

    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;

<br />

<br />

### 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:

<br />

**SQL**

<br />

    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');

<br />

<br />

### 5. Spatial join with business locations

Join weather forecasts directly with a table of retail stores, facilities, or
asset coordinates:

<br />

**SQL**

<br />

    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');

<br />

<br />

*** ** * ** ***

## 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` to leverage spatial clustering.

*** ** * ** ***

## Starter guides

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

- [WeatherNext 3 Starter Guide - BigQuery (0.1°)](https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_BigQuery_0p1deg.ipynb)
- [WeatherNext 3 Starter Guide - BigQuery (0.05°)](https://storage.googleapis.com/weathernext-public/colabs/WeatherNext_3_Starter_Guide_BigQuery_0p05deg.ipynb)

*** ** * ** ***

## 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](https://storage.googleapis.com/weathernext-public/terms-of-use.pdf).
- **Historical Data (data relating to 1 hour ago or more):** Licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

For more details, see
[Terms of Service and Disclaimers](https://developers.google.com/weathernext/guides/disclaimers).