Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RNR Hotfix: Workflow modified to save and reassign status rather than recalculate #603

Merged
merged 1 commit into from
Jan 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 45 additions & 30 deletions Core/LAMBDA/rnr_functions/rnr_domain_generator/sql/domain.sql
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,13 @@ SELECT
INTO rnr.temporal_domain_flow_forecasts
FROM all_flow_forecasts;

-------------------------------------------------------
-------------------------------------------------------
------------- CREATE RNR DOMAIN ROUTLINK -------------
-------------------------------------------------------
-------------------------------------------------------
-----------------------------------------------------------------
-----------------------------------------------------------------
------------- CREATE DOMAIN LIDS WITH STATUS TABLE -------------
-----------------------------------------------------------------
-----------------------------------------------------------------

DROP TABLE IF EXISTS rnr.domain_routelink;
DROP TABLE IF EXISTS rnr.domain_lids_with_status;

WITH RECURSIVE

Expand Down Expand Up @@ -215,10 +215,11 @@ max_status_flow AS (
THEN CASE
WHEN th.record_flow IS NOT NULL AND mf.max_flow_cfs >= th.record_flow
THEN 'record'
ELSE 'thresholds undefined'
ELSE 'all thresholds undefined'
END
ELSE 'no_flooding'
END as status
ELSE 'no flooding'
END as status,
rating_source
FROM max_flow AS mf
LEFT JOIN threshold AS th
ON th.nws_station_id = mf.lid
Expand All @@ -240,39 +241,53 @@ max_status_stage AS (
THEN CASE
WHEN th.record_stage IS NOT NULL AND mf.max_stage_ft >= th.record_stage
THEN 'record'
ELSE 'thresholds undefined'
ELSE 'all thresholds undefined'
END
ELSE 'no_flooding'
END as status
ELSE 'no flooding'
END as status,
rating_source
FROM max_stage AS mf
LEFT JOIN threshold AS th
ON th.nws_station_id = mf.lid
),

flood_flow_lid AS (
SELECT lid
FROM max_status_flow
WHERE status in ('action', 'minor', 'moderate', 'major', 'record')
),

flood_stage_lid AS (
SELECT lid
lid_status AS (
SELECT
lid,
status,
rating_source
FROM max_status_stage
WHERE status in ('action', 'minor', 'moderate', 'major', 'record')
),

flood_lid AS (

UNION

SELECT
lid
FROM flood_flow_lid
lid,
status,
rating_source
FROM max_status_flow
WHERE lid NOT IN (SELECT lid FROM max_status_stage)
)

UNION
SELECT *
INTO rnr.domain_lids_with_status
FROM lid_status
LEFT JOIN derived.ahps_restricted_sites restricted
ON restricted.nws_lid = lid_status.lid
WHERE restricted.nws_lid IS NULL;

-------------------------------------------------------
-------------------------------------------------------
------------- CREATE RNR DOMAIN ROUTLINK -------------
-------------------------------------------------------
-------------------------------------------------------

DROP TABLE IF EXISTS rnr.domain_routelink;

WITH RECURSIVE flood_lid AS (
SELECT
lid
FROM flood_stage_lid
WHERE lid NOT IN (SELECT lid FROM flood_flow_lid)
AND lid IN (SELECT lid FROM max_flow)
FROM rnr.domain_lids_with_status
WHERE status IN ('action', 'minor', 'moderate', 'major')
),

flood_xwalk AS (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,39 +118,13 @@ root_status_trace_reaches AS (
stream_length,
is_waterbody,
fcst_meta.issue_time,
rating_source,
CASE
WHEN rfc_defined_fcst_point AND fcst_meta.issue_time IS NULL
THEN 'No Forecast'
WHEN major_flow IS NOT NULL AND streamflow > major_flow
THEN 'Major'
WHEN major_stage IS NOT NULL AND stage_from_curve > major_stage
THEN 'Major'
WHEN moderate_flow IS NOT NULL AND streamflow > moderate_flow
THEN 'Moderate'
WHEN moderate_stage IS NOT NULL AND stage_from_curve > moderate_stage
THEN 'Moderate'
WHEN minor_flow IS NOT NULL AND streamflow > minor_flow
THEN 'Minor'
WHEN minor_stage IS NOT NULL AND stage_from_curve > minor_stage
THEN 'Minor'
WHEN action_flow IS NOT NULL AND streamflow > action_flow
THEN 'Action'
WHEN action_stage IS NOT NULL AND stage_from_curve > action_stage
THEN 'Action'
WHEN issue_time IS NOT NULL
AND action_flow IS NULL AND minor_flow IS NULL AND moderate_flow IS NULL AND major_flow IS NULL
AND action_stage IS NULL AND minor_stage IS NULL AND moderate_stage IS NULL AND major_stage IS NULL
THEN 'All Thresholds Undefined'
WHEN mf.nws_station_id IS NOT NULL
THEN 'No Flooding'
ELSE ''
END as max_status
status.rating_source,
INITCAP(status.status) as max_status
FROM max_flows_station_xwalk_with_rc_stage mf
LEFT JOIN fcst_meta
ON fcst_meta.lid = mf.nws_station_id
LEFT JOIN threshold
ON threshold.nws_station_id = mf.nws_station_id
LEFT JOIN rnr.domain_lids_with_status status
ON status.lid = mf.nws_station_id
WHERE rfc_defined_fcst_point IS TRUE OR issue_time IS NOT NULL
ORDER BY feature_id, issue_time, rfc_defined_fcst_point DESC
),
Expand Down Expand Up @@ -219,7 +193,7 @@ agg_trace AS (
WHEN max_status = 'All Thresholds Undefined'
THEN max_status || ' at ' || influential_forecast_point || ' (' || root_feature_id || ' [' || root_stream_order || ']) despite forecast issued ' || issue_time || ' ' || ROUND(CAST(distance_from_forecast_point * 0.000621 as numeric), 1) || ' miles upstream'
WHEN issue_time IS NOT NULL
THEN max_status || ' (' || rating_source || ') issued ' || issue_time || ' at ' || influential_forecast_point || ' (' || root_feature_id || ' [' || root_stream_order || ']) ' || ROUND(CAST(distance_from_forecast_point * 0.000621 as numeric), 1) || ' miles upstream'
THEN max_status || ' issued ' || issue_time || ' at ' || influential_forecast_point || ' (' || root_feature_id || ' [' || root_stream_order || ']) ' || ROUND(CAST(distance_from_forecast_point * 0.000621 as numeric), 1) || ' miles upstream'
ELSE max_status || ' at ' || influential_forecast_point || ' (' || root_feature_id || ' [' || root_stream_order || ']) ' || ROUND(CAST(distance_from_forecast_point * 0.000621 as numeric), 1) || ' miles upstream'
END,
'; '
Expand Down