- CollectDB 다중 신호 수집 → S&P Global AIS API 단일 수집으로 전환 - sig_src_cd + target_id 이중 식별자 → mmsi(VARCHAR) 단일 식별자 - t_vessel_latest_position → t_ais_position 테이블 전환 - 레거시 배치/유틸 ~30개 클래스 삭제 (VesselAggregationJobConfig, ShipKindCodeConverter 등) - AisTargetCacheManager 기반 캐시 이중 구조 (최신위치 + 트랙 버퍼) - CacheBasedVesselTrackDataReader + CacheBasedTrackJobListener 신규 추가 - VesselStaticStepConfig: 정적정보 CDC 변경 검출 + hourly job 편승 - SignalKindCode enum: vesselType/extraInfo 기반 선종 자동 분류 - WebSocket/STOMP 전체 mmsi 전환 (StompTrackStreamingService ~40곳) - 모니터링/성능 최적화 코드 mmsi 기반 전환 - DataSource 설정 통합 (snpdb 단일 DB) - AreaBoundaryCache Polygon→Geometry 캐스트 수정 (MULTIPOLYGON 지원) - ConcurrentHashMap 적용 (VesselTrackStepConfig 동시성 버그 수정) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
43 lines
1.4 KiB
SQL
43 lines
1.4 KiB
SQL
-- hourly 테이블 직접 UPDATE (함수 없이)
|
|
UPDATE signal.t_vessel_tracks_hourly AS h
|
|
SET track_geom_v2 = ST_GeomFromText(
|
|
REPLACE(
|
|
REPLACE(ST_AsText(track_geom), 'LINESTRING M(',
|
|
'LINESTRING M(' ||
|
|
CASE
|
|
WHEN ST_M(ST_PointN(track_geom, 1)) = 0
|
|
THEN EXTRACT(EPOCH FROM time_bucket + INTERVAL '9 hours')::text
|
|
ELSE (EXTRACT(EPOCH FROM time_bucket + INTERVAL '9 hours')::bigint + ST_M(ST_PointN(track_geom, 1)))::text
|
|
END || ' '
|
|
),
|
|
')',
|
|
EXTRACT(EPOCH FROM time_bucket + INTERVAL '9 hours')::text || ')'
|
|
),
|
|
4326
|
|
)
|
|
WHERE time_bucket = '2025-08-07 14:00:00'
|
|
AND track_geom IS NOT NULL
|
|
AND track_geom_v2 IS NULL;
|
|
|
|
-- daily 테이블 직접 UPDATE
|
|
UPDATE signal.t_vessel_tracks_daily AS d
|
|
SET track_geom_v2 = track_geom -- 임시로 복사 (정확한 변환은 나중에)
|
|
WHERE time_bucket = DATE_TRUNC('day', NOW())
|
|
AND track_geom IS NOT NULL
|
|
AND track_geom_v2 IS NULL;
|
|
|
|
-- 결과 확인
|
|
SELECT
|
|
'hourly' as table_type,
|
|
COUNT(*) as total,
|
|
COUNT(track_geom_v2) as v2_filled
|
|
FROM signal.t_vessel_tracks_hourly
|
|
WHERE time_bucket = '2025-08-07 14:00:00'
|
|
UNION ALL
|
|
SELECT
|
|
'daily' as table_type,
|
|
COUNT(*) as total,
|
|
COUNT(track_geom_v2) as v2_filled
|
|
FROM signal.t_vessel_tracks_daily
|
|
WHERE time_bucket = DATE_TRUNC('day', NOW());
|