Observation schema
weather.observations() returns merged METAR/SPECI reports. The canonical schema.observation.merged.v1 record has 30 fields; the weather read also attaches local_standard_date, the local-standard-time day used by training and settlement joins.
Python DataFrames and TypeScript rows use snake_case. They are not yet the same contents, so inspect the returned schema before sharing a frozen contract across runtimes.
Identity and time
Section titled “Identity and time”| Field | Type | Notes |
|---|---|---|
station |
string | Canonical ICAO/ASOS id, for example KNYC |
event_time_utc |
UTC timestamp string | When the report is valid |
observation_type |
enum | METAR or SPECI |
source |
string | Bare row source: awc, iem, or ghcnh |
local_standard_date |
date | Derived local-standard-time day for this station |
The merged report key is (station, event_time_utc, observation_type). When sources overlap, the fixed merge priority selects one survivor and the row keeps the source that actually won.
Temperature
Section titled “Temperature”| Field | Unit | Nullable |
|---|---|---|
temp_c |
°C | Yes |
temp_f |
°F | Yes |
dewpoint_c |
°C | Yes |
dewpoint_f |
°F | Yes |
The SDK preserves the available precision. Integer settlement rounding belongs in the settlement recipe, not the stored observation.
| Field | Unit | Nullable |
|---|---|---|
wind_direction_degrees |
degrees true | Yes |
wind_speed_kt |
knots | Yes |
wind_gust_kt |
knots | Yes |
Variable winds can have a null direction.
Pressure, visibility, and precipitation
Section titled “Pressure, visibility, and precipitation”| Field | Unit | Notes |
|---|---|---|
altimeter_inhg |
inHg | Altimeter setting |
sea_level_pressure_hpa |
hPa | Sea-level pressure |
visibility_miles |
statute miles | Parsed report visibility |
precipitation_in_1h |
inches | Accumulation in the preceding hour |
These measurements are nullable when the source report does not carry them.
Sky layers
Section titled “Sky layers”Up to four layers are preserved:
| Fields | Notes |
|---|---|
sky_cover_1 … sky_cover_4 |
CLR, FEW, SCT, BKN, OVC, VV, or null |
sky_base_1_ft … sky_base_4_ft |
Layer base in feet, nullable |
Layer 1 is the lowest reported significant layer.
Weather, peak wind, snow, and raw report
Section titled “Weather, peak wind, snow, and raw report”| Field | Notes |
|---|---|
weather_codes |
Raw METAR weather-code string |
peak_wind_gust_kt |
Peak gust in knots |
peak_wind_direction_degrees |
Peak-wind direction |
peak_wind_time |
Peak-wind timestamp |
snow_depth_inches |
Snow depth |
qc_field |
Upstream source quality marker |
raw_metar |
Original METAR text when the source provides it |
AWC’s structured JSON can leave raw_metar null. Do not assume every provider exposes the original bulletin text.
Field count
Section titled “Field count”The 30 canonical merged-schema fields are:
- identity/source: 4
- temperature: 4
- wind: 3
- pressure/visibility/precipitation: 4
- sky cover and bases: 8
- weather/peak wind/snow/QC/raw text: 7
local_standard_date is the additional derived join column on weather.observations() output.
1.x to 2.0 name changes
Section titled “1.x to 2.0 name changes”Common stale names and their 2.0 replacements:
| 1.x or pre-contract name | 2.0 |
|---|---|
station_code |
station |
observed_at |
event_time_utc |
wind_dir_degrees |
wind_direction_degrees |
sea_level_pressure_mb |
sea_level_pressure_hpa |
precip_1hr_inches |
precipitation_in_1h |
peak_wind_dir |
peak_wind_direction_degrees |
Related
Section titled “Related”- Weather observations for query examples
- Sources & provenance for merge and source-pin behavior
- Daily windows for local-day bucketing
- Quality control for the optional
obs_qc_statusannotation