From bb99729e9e74566a601bd8a181656c4e4bcd2b69 Mon Sep 17 00:00:00 2001 From: windpacer Date: Thu, 18 Jun 2026 20:42:37 +0900 Subject: [PATCH] =?UTF-8?q?chore(report):=20=EB=94=94=EC=A7=80=ED=84=B8?= =?UTF-8?q?=EC=9E=94=EC=9E=AC=EC=A0=95=EB=A6=AC=20=EB=AC=B8=EC=84=9C=20?= =?UTF-8?q?=ED=8F=90=EA=B8=B0=20+=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20.QV=207?= =?UTF-8?q?=EA=B0=9C=20keep=20=EC=9E=AC=EB=B6=84=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/작업지시-history-디지털잔재정리.md: SUPERSEDED 배너(실행 금지). 2026-06-18 실측 — 삭제대상(비-archive ~2천만)은 디지털 잔재 0, 전부 아날로그 루프/적산. 특히 .QV는 리포트(history_table)가 의존 → 삭제 시 과거 리포트 파손. - scripts/sql/report_keep_qv_tags.sql: SteamFlow 적산 FIQ-*.QV 7개를 archive_enabled=TRUE로 재분류(register-map 누락 보정). realtime/is_active=FALSE 로 폴링 부작용 0. 멱등(map 재빌드 후 재적용). DB에는 이미 적용. 검증: 리포트 태그 삭제대상 0행, 전체 삭제대상 19.98M→17.62M(2.36M 보호). Co-Authored-By: Claude Opus 4.8 --- docs/작업지시-history-디지털잔재정리.md | 27 +++++++++++++++++++++++-- scripts/sql/report_keep_qv_tags.sql | 22 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 scripts/sql/report_keep_qv_tags.sql diff --git a/docs/작업지시-history-디지털잔재정리.md b/docs/작업지시-history-디지털잔재정리.md index e8cec39..f8f5f5b 100644 --- a/docs/작업지시-history-디지털잔재정리.md +++ b/docs/작업지시-history-디지털잔재정리.md @@ -1,8 +1,31 @@ # 작업지시: hc900.history_table 디지털 상태점 잔재 정리 -> 다른 LLM/작업자가 이 문서만으로 실행할 수 있도록 작성. 2026-06-09 기준. +> ⛔ **SUPERSEDED — 실행 금지 (2026-06-18 검증으로 폐기).** +> 이 문서의 삭제 절차(§2·§3)를 **실행하지 말 것.** 작성 시점(2026-06-09) 이후 P0/P2 +> 셀프서비스 리포트가 추가되면서 전제가 무효가 되었다. +> +> **2026-06-18 실측 분석 결과** — `archive_enabled=FALSE` 삭제대상(약 2천만 행)의 구성: +> | 속성 | 행수 | 숫자비율 | 정체 | +> |---|---|---|---| +> | `.QV` | 5.45M | 95% | **적산 totalizer — 리포트 production_total/mass_balance_closure가 history_table에서 직접 읽음** | +> | `.HZ`/`.HZSET` | 8.88M | 100% | 펌프 주파수 | +> | `.PV` | 2.62M | 100% | 공정 측정값 | +> | `.SP`/`.OP`/`.LSET` | 3.03M | 100% | 설정·출력·리미트 | +> +> - 삭제대상에 **디지털 상태점(state 라벨/비숫자) 행은 0개** — 원래 목표였던 디지털 잔재는 +> 이미 정리 완료 상태다(history_table에 남아있지 않음). +> - 남은 비-archive는 잔재가 아니라 **루프 내부 파라미터 + 적산값**이며, 특히 `.QV`는 +> 리포트 기본 소스(`history_table`)에서 메트릭이 의존한다. **삭제 시 과거 일/월/연 리포트가 깨진다.** +> - 후속 조치(완료): 리포트 의존 `.QV` 7개(`FIQ-6115/6215/8115/9115/9215/10115/10215.QV`)가 +> register-map 누락으로 keep에서 빠져 있어 `archive_enabled=TRUE`로 재분류 → +> **[`scripts/sql/report_keep_qv_tags.sql`](../scripts/sql/report_keep_qv_tags.sql)** (멱등, map 재빌드 후 재적용). +> 디지털 잔재 정리 자체는 완료로 종결. +> +> 아래 원문은 이력 보존용으로만 남긴다. -## 목적 +--- + +## 목적 (원문 — 폐기됨) `hc900.history_table`에는 **디지털 상태점**(예: `AG-3202`, `C3601_RUN`, `CH-5601` — `{0 | L-STOP | }` 형태, state 라벨 보유)의 과거 이력 약 **15만 행**이 잘못 쌓여 있다. diff --git a/scripts/sql/report_keep_qv_tags.sql b/scripts/sql/report_keep_qv_tags.sql new file mode 100644 index 0000000..bfd0cd1 --- /dev/null +++ b/scripts/sql/report_keep_qv_tags.sql @@ -0,0 +1,22 @@ +-- 리포트 의존 적산(.QV) 태그를 archive_enabled=TRUE(keep)로 분류. +-- 배경: SteamFlow 적산 FIQ-*.QV 7개가 register-map(Sinam xlsx)에 .QV 속성이 없어 +-- hc900_map_master에서 누락 → archive 기준 "삭제대상"으로 오분류. +-- energy_intensity_qv 등 메트릭이 history_table에서 직접 읽는 ~2.36M행이 위험했음. +-- 멱등: 이미 있으면 archive_enabled만 보장. realtime_enabled/is_active=FALSE(폴링 부작용 0). +-- 적용: docker exec -i iiot-timescaledb psql -U postgres -d iiot_platform -f - < scripts/sql/report_keep_qv_tags.sql +-- ※ map 재빌드(build_register_map.py) 후 재적용 필요. 근본 해결은 빌더가 FIQ-*.QV를 포함하는 것. + +INSERT INTO hc900.hc900_map_master + (tagname, hc900_tag, modbus_addr, data_type, access, is_active, controller_id, realtime_enabled, archive_enabled) +SELECT replace(p.tagname,'.PV','.QV'), replace(p.tagname,'.PV','.QV'), 0, 'float32', 'R', + false, p.controller_id, false, true +FROM hc900.hc900_map_master p +WHERE p.tagname IN ('FIQ-6115.PV','FIQ-6215.PV','FIQ-8115.PV','FIQ-9115.PV','FIQ-9215.PV','FIQ-10115.PV','FIQ-10215.PV') + AND NOT EXISTS (SELECT 1 FROM hc900.hc900_map_master q + WHERE q.tagname = replace(p.tagname,'.PV','.QV') AND q.controller_id = p.controller_id); + +-- 이미 존재하지만 미분류인 경우 보정(멱등) +UPDATE hc900.hc900_map_master +SET archive_enabled = true +WHERE tagname IN ('FIQ-6115.QV','FIQ-6215.QV','FIQ-8115.QV','FIQ-9115.QV','FIQ-9215.QV','FIQ-10115.QV','FIQ-10215.QV') + AND NOT archive_enabled;