Skip to content

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 byte-for-byte identical, so inspect the returned schema before sharing a frozen contract across runtimes.

FieldTypeNotes
stationstringCanonical ICAO/ASOS id, for example KNYC
event_time_utcUTC timestamp stringWhen the report is valid
observation_typeenumMETAR or SPECI
sourcestringBare row source: awc, iem, or ghcnh
local_standard_datedateDerived 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.

FieldUnitNullable
temp_c°CYes
temp_f°FYes
dewpoint_c°CYes
dewpoint_f°FYes

The SDK preserves the available precision. Integer settlement rounding belongs in the settlement recipe, not the stored observation.

FieldUnitNullable
wind_direction_degreesdegrees trueYes
wind_speed_ktknotsYes
wind_gust_ktknotsYes

Variable winds can have a null direction.

FieldUnitNotes
altimeter_inhginHgAltimeter setting
sea_level_pressure_hpahPaSea-level pressure
visibility_milesstatute milesParsed report visibility
precipitation_in_1hinchesAccumulation in the preceding hour

These measurements are nullable when the source report does not carry them.

Up to four layers are preserved:

FieldsNotes
sky_cover_1sky_cover_4CLR, FEW, SCT, BKN, OVC, VV, or null
sky_base_1_ftsky_base_4_ftLayer base in feet, nullable

Layer 1 is the lowest reported significant layer.

FieldNotes
weather_codesRaw METAR weather-code string
peak_wind_gust_ktPeak gust in knots
peak_wind_direction_degreesPeak-wind direction
peak_wind_timePeak-wind timestamp
snow_depth_inchesSnow depth
qc_fieldUpstream source quality marker
raw_metarOriginal 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.

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.

Common stale names and their 2.0 replacements:

1.x or pre-contract name2.0
station_codestation
observed_atevent_time_utc
wind_dir_degreeswind_direction_degrees
sea_level_pressure_mbsea_level_pressure_hpa
precip_1hr_inchesprecipitation_in_1h
peak_wind_dirpeak_wind_direction_degrees