fix: parent_resolution JOIN 타이밍 갭 허용 — snapshot_time - 10분

5분 사이클에서 폴리곤 저장 → inference 실행 순서로 인해
latest snapshot_time > last_evaluated_at이 될 수 있음.
JOIN 조건에 10분 여유를 두어 이전 사이클 결과도 매칭되도록 수정.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
htlee 2026-04-06 07:08:54 +09:00
부모 ed618f6dd0
커밋 dd9de6739c

파일 보기

@ -51,7 +51,7 @@ public class GroupPolygonService {
JOIN latest_groups lg
ON lg.group_key = c.group_key
AND lg.sub_cluster_id = c.sub_cluster_id
AND c.observed_at >= lg.snapshot_time
AND c.observed_at >= lg.snapshot_time - INTERVAL '10 minutes'
GROUP BY c.group_key, c.sub_cluster_id
),
candidate_counts AS (
@ -79,7 +79,7 @@ public class GroupPolygonService {
LEFT JOIN %s r
ON r.group_key = lg.group_key
AND r.sub_cluster_id = lg.sub_cluster_id
AND r.last_evaluated_at >= lg.snapshot_time
AND r.last_evaluated_at >= lg.snapshot_time - INTERVAL '10 minutes'
LEFT JOIN candidate_counts cc
ON cc.group_key = lg.group_key
AND cc.sub_cluster_id = lg.sub_cluster_id
@ -105,7 +105,7 @@ public class GroupPolygonService {
LEFT JOIN %s r
ON r.group_key = g.group_key
AND r.sub_cluster_id = g.sub_cluster_id
AND r.last_evaluated_at >= g.snapshot_time
AND r.last_evaluated_at >= g.snapshot_time - INTERVAL '10 minutes'
WHERE g.group_key = ?
ORDER BY g.snapshot_time DESC
LIMIT 1
@ -130,7 +130,7 @@ public class GroupPolygonService {
LEFT JOIN %s r
ON r.group_key = g.group_key
AND r.sub_cluster_id = g.sub_cluster_id
AND r.last_evaluated_at >= g.snapshot_time
AND r.last_evaluated_at >= g.snapshot_time - INTERVAL '10 minutes'
WHERE g.group_key = ? AND g.snapshot_time > NOW() - CAST(? || ' hours' AS INTERVAL)
ORDER BY g.snapshot_time DESC
""";
@ -186,7 +186,7 @@ public class GroupPolygonService {
JOIN latest_groups lg
ON lg.group_key = c.group_key
AND lg.sub_cluster_id = c.sub_cluster_id
AND c.observed_at >= lg.snapshot_time
AND c.observed_at >= lg.snapshot_time - INTERVAL '10 minutes'
GROUP BY c.group_key, c.sub_cluster_id
),
candidate_counts AS (
@ -215,7 +215,7 @@ public class GroupPolygonService {
JOIN %s r
ON r.group_key = lg.group_key
AND r.sub_cluster_id = lg.sub_cluster_id
AND r.last_evaluated_at >= lg.snapshot_time
AND r.last_evaluated_at >= lg.snapshot_time - INTERVAL '10 minutes'
LEFT JOIN candidate_counts cc
ON cc.group_key = lg.group_key
AND cc.sub_cluster_id = lg.sub_cluster_id
@ -247,7 +247,7 @@ public class GroupPolygonService {
JOIN latest_groups lg
ON lg.group_key = c.group_key
AND lg.sub_cluster_id = c.sub_cluster_id
AND c.observed_at >= lg.snapshot_time
AND c.observed_at >= lg.snapshot_time - INTERVAL '10 minutes'
WHERE c.group_key = ?
GROUP BY c.group_key, c.sub_cluster_id
),
@ -277,7 +277,7 @@ public class GroupPolygonService {
LEFT JOIN %s r
ON r.group_key = lg.group_key
AND r.sub_cluster_id = lg.sub_cluster_id
AND r.last_evaluated_at >= lg.snapshot_time
AND r.last_evaluated_at >= lg.snapshot_time - INTERVAL '10 minutes'
LEFT JOIN candidate_counts cc
ON cc.group_key = lg.group_key
AND cc.sub_cluster_id = lg.sub_cluster_id
@ -301,7 +301,7 @@ public class GroupPolygonService {
JOIN latest_groups lg
ON lg.group_key = c.group_key
AND lg.sub_cluster_id = c.sub_cluster_id
AND c.observed_at >= lg.snapshot_time
AND c.observed_at >= lg.snapshot_time - INTERVAL '10 minutes'
GROUP BY c.group_key, c.sub_cluster_id
)
SELECT c.group_key, c.sub_cluster_id, c.candidate_mmsi, c.candidate_name,