Add Postgres mapping for SPC outlooks
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
// - weather.forecast_discussion.v1 -> model.WeatherForecastDiscussion
|
||||
// - weather.weather_story.v1 -> model.WeatherStoryRun
|
||||
// - weather.alert.v1 -> model.WeatherAlertRun
|
||||
// - weather.outlook.v1 -> model.WeatherOutlookRun
|
||||
//
|
||||
// Parent/child relationships:
|
||||
// - observations.event_id -> observation_present_weather.event_id
|
||||
@@ -19,9 +20,10 @@
|
||||
// - weather_story_runs.event_id -> weather_stories.run_event_id
|
||||
// - alert_runs.event_id -> alerts.run_event_id
|
||||
// - alerts.(run_event_id, alert_index) -> alert_references.(run_event_id, alert_index)
|
||||
// - outlook_runs.event_id -> outlooks.run_event_id
|
||||
//
|
||||
// Dedupe and retention behavior:
|
||||
// - Parent primary keys (event_id): observations, forecasts, alert_runs.
|
||||
// - Parent primary keys (event_id): observations, forecasts, alert_runs, outlook_runs.
|
||||
// - Child primary keys use positional indexes to preserve payload order.
|
||||
// - Prune columns:
|
||||
// - observations.observed_at
|
||||
@@ -35,11 +37,13 @@
|
||||
// - alert_runs.as_of
|
||||
// - alerts.as_of
|
||||
// - alert_references.as_of
|
||||
// - outlook_runs.as_of
|
||||
// - outlooks.as_of
|
||||
//
|
||||
// Envelope field mapping (shared parent columns)
|
||||
//
|
||||
// These columns exist on parent tables such as observations, forecasts,
|
||||
// forecast_discussions, weather_story_runs, and alert_runs:
|
||||
// forecast_discussions, weather_story_runs, alert_runs, and outlook_runs:
|
||||
// - event_id TEXT -> event.id
|
||||
// - event_kind TEXT -> event.kind
|
||||
// - event_source TEXT -> event.source
|
||||
@@ -208,6 +212,46 @@
|
||||
// - sender TEXT NULL -> payload.alerts[i].references[j].sender
|
||||
// - sent TIMESTAMPTZ NULL -> payload.alerts[i].references[j].sent
|
||||
//
|
||||
// 10. outlook_runs (PK: event_id)
|
||||
//
|
||||
// - event_id TEXT -> event.id
|
||||
// - event_kind TEXT -> event.kind
|
||||
// - event_source TEXT -> event.source
|
||||
// - event_schema TEXT -> event.schema
|
||||
// - event_emitted_at TIMESTAMPTZ -> event.emitted_at
|
||||
// - event_effective_at TIMESTAMPTZ NULL -> event.effective_at
|
||||
// - location_id TEXT NULL -> payload.locationId
|
||||
// - location_name TEXT NULL -> payload.locationName
|
||||
// - latitude DOUBLE PRECISION NULL -> payload.latitude
|
||||
// - longitude DOUBLE PRECISION NULL -> payload.longitude
|
||||
// - as_of TIMESTAMPTZ -> payload.asOf
|
||||
// - issued_at TIMESTAMPTZ NULL -> payload.issuedAt
|
||||
// - outlook_count INTEGER -> len(payload.outlooks)
|
||||
//
|
||||
// 11. outlooks (PK: run_event_id, outlook_index)
|
||||
//
|
||||
// - run_event_id TEXT -> outlook_runs.event_id / payload.outlooks[i]
|
||||
// - outlook_index INTEGER -> i (array position in payload.outlooks)
|
||||
// - as_of TIMESTAMPTZ -> payload.asOf (copied from parent)
|
||||
// - product TEXT -> payload.outlooks[i].product
|
||||
// - day INTEGER -> payload.outlooks[i].day
|
||||
// - outlook_type TEXT -> payload.outlooks[i].outlookType
|
||||
// - label TEXT -> payload.outlooks[i].label
|
||||
// - label_text TEXT NULL -> payload.outlooks[i].labelText
|
||||
// - severity_rank INTEGER NULL -> payload.outlooks[i].severityRank
|
||||
// - valid_from TIMESTAMPTZ -> payload.outlooks[i].validFrom
|
||||
// - valid_to TIMESTAMPTZ -> payload.outlooks[i].validTo
|
||||
// - issued_at TIMESTAMPTZ -> payload.outlooks[i].issuedAt
|
||||
// - expires_at TIMESTAMPTZ -> payload.outlooks[i].expiresAt
|
||||
// - forecaster TEXT NULL -> payload.outlooks[i].forecaster
|
||||
// - headline TEXT NULL -> payload.outlooks[i].headline
|
||||
// - summary TEXT NULL -> payload.outlooks[i].summary
|
||||
// - discussion TEXT NULL -> payload.outlooks[i].discussion
|
||||
// - source_url TEXT NULL -> payload.outlooks[i].sourceUrl
|
||||
// - image_url TEXT NULL -> payload.outlooks[i].imageUrl
|
||||
// - contains_location BOOLEAN -> payload.outlooks[i].containsLocation
|
||||
// - geometry_json TEXT -> compact JSON payload.outlooks[i].geometry
|
||||
//
|
||||
// Reconstructing canonical JSON payloads
|
||||
//
|
||||
// - WeatherObservation:
|
||||
@@ -226,4 +270,8 @@
|
||||
// read one row from alert_runs, join alerts by run_event_id ordered by
|
||||
// alert_index, then join alert_references by (run_event_id, alert_index)
|
||||
// ordered by reference_index to rebuild references per alert.
|
||||
//
|
||||
// - WeatherOutlookRun:
|
||||
// read one row from outlook_runs, then join outlooks by run_event_id ordered
|
||||
// by outlook_index to rebuild outlooks.
|
||||
package postgres
|
||||
|
||||
Reference in New Issue
Block a user