数据库表结构与指标口径设计
数据库表结构与指标口径设计
状态:可进入客户口径确认和后端实现评审;初始化 DDL 只能经评审后对空库手工执行。
数据库:MySQL 8;业务时区:Asia/Shanghai;设计日期:2026-07-17。
配套 DDL:V1__initial_schema_and_seed.sql。
1. 证据优先级、范围与不建设项
1.1 证据优先级
发生冲突时按以下顺序处理,低优先级证据不得覆盖高优先级规则:
docs/需求建设详细方案V2.0.md:唯一业务规则来源。docs/性能表_0608.csv、docs/干扰表_0609.csv:仅验证真实列、值域、空值、精度、时间覆盖和关联事实。docs/性能表结构.txt、docs/干扰表结构.txt:仅解释源字段语义及 ClickHouse 字段名,不复制其类型或未交付字段。V1__initial_schema_and_seed.sql、application.yml、ScheduledJob.java:现有 MySQL、时区和兼容边界。frontend/src/pages/**、AppRoutes.tsx:只表示页面展示意图和字段需求。mockApi.ts:随机值、硬编码阈值、状态、日期、排名、基线和前端计算全部视为演示占位,不作为业务证据。
1.2 本轮范围
- 只设计导入、校验、有效小时事实、发布、日/月聚合、阈值、动态基线、模型/训练/回测/预测、告警/证据/动作、调度和审计。
- 只使用真实 CSV 50 个列出现次(性能 28 列、干扰 22 列)以及需求和页面确有消费者的计算字段。
- 复用并扩展
tb_schedule_job、tb_schedule_instance、tb_audit_log;tb_audit_log.request_id就是同一动作链的traceId,不新增同义trace_id列。 - 空库初始化 DDL 和稳定种子数据只在
backend/src/main/resources/db/migration/V1__initial_schema_and_seed.sql维护;应用启动不得自动迁移,已有业务库不得重复执行该初始化脚本。
1.3 明确不建设
- 不建设管道/业务体验、15 分钟、GIS/孪生、自动根因、自动参数下发、PDF 报告、客户主数据、浏览器 CSV 上传。
- 不接收 ClickHouse 原结构中 CSV 未提供的 PRB0~272、MAC/RLC/切片/设备等数百字段。
- 不为单张图建表;箱线、排行、矩阵摘要和画像共用
tb_metric_stat_result。 - 不预先分库分表,不创建未被当前导入、调度或页面查询使用的索引。
- 不发布跨小区比例均值、dBm 均值排行、SLA 达成率、雷达归一化或“RRC 连接总数”等未确认结论。
- 不实现 Controller、Service、Repository、算法或前端改动。
2. 数据画像与独立复核
2.1 结构化解析方式
使用 PowerShell Import-Csv -Encoding UTF8 解析 CSV 引号、空字段和列名,没有按行或逗号拆分字符串。时间使用 ParseExact('yyyy-MM-dd HH:mm:ss', InvariantCulture),数值使用 Decimal.TryParse(..., InvariantCulture);幂等键由解析后的 cgi 和 datatime 构成。
核心复核命令(实际执行):
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$perf = @(Import-Csv -LiteralPath 'docs/性能表_0608.csv' -Encoding UTF8)
$intf = @(Import-Csv -LiteralPath 'docs/干扰表_0609.csv' -Encoding UTF8)
$perfKeys = [Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
$intfKeys = [Collections.Generic.HashSet[string]]::new([StringComparer]::Ordinal)
$perf | ForEach-Object { [void]$perfKeys.Add($_.cgi + [char]31 + $_.datatime) }
$intf | ForEach-Object { [void]$intfKeys.Add($_.cgi + [char]31 + $_.datatime) }
$common = [Collections.Generic.HashSet[string]]::new($perfKeys, [StringComparer]::Ordinal)
$common.IntersectWith($intfKeys)
# 行列数、时间、空值和数值范围均在已导入对象上统计。
2.2 基准结果
| 校验项 | 期望 | 实际 | 结论 |
|---|---|---|---|
| 性能表行数 / 列数 | 47,352 / 28 | 47,352 / 28 | 通过 |
| 性能表 CGI 数 | 20 | 20 | 通过 |
| 性能表时间范围 | 2026-03-01 00:00:00 ~ 2026-06-08 15:00:00 | 相同 | 通过 |
性能 (cgi, datatime) 重复数 |
0 | 0;唯一键 47,352 | 通过 |
| 干扰表行数 / 列数 | 44,092 / 22 | 44,092 / 22 | 通过 |
| 干扰表 CGI 数 | 20 | 20 | 通过 |
| 干扰表时间范围 | 2026-03-01 00:00:00 ~ 2026-06-08 23:00:00 | 相同 | 通过 |
干扰 (cgi, datatime) 重复数 |
0 | 0;唯一键 44,092 | 通过 |
| 共同关联键 | 43,780 | 43,780 | 通过 |
| 仅性能 / 仅干扰键 | 未给定 | 3,572 / 312 | 事实补充 |
| 性能上行 / 下行 PRB 空值 | 各 2,630 | 各 2,630 | 通过 |
切换成功率 >1 |
32,最大 2 | 32,最大 2 | 通过 |
| 干扰下行 / 上行频点为 0 | 各 44,092 | 各 44,092 | 通过 |
| 共同键共享维度冲突 | 应为 0 | 18 个共享字段逐列均为 0 | 通过 |
| 时间解析失败 / 主键空值 | 应为 0 | 两表均为 0 | 通过 |
补充画像:性能出现 2,373 个小时点,文件范围内缺 19 个自然小时;干扰出现 2,211 个小时点,缺 189 个自然小时。这只是文件覆盖事实,应收计划未确认,不能称为完整率、及时率或 SLA。
2.3 类型、精度和质量事实
| 字段组 | 真实值域 / 精度 | MySQL 选择 | 处理 |
|---|---|---|---|
| 三类成功/掉线比例、PRB | 比例源值;最大小数位 8~10 | DECIMAL(12,10) |
存 0~1,展示乘 100;空值为 N/A,越界原值不截断 |
| 切换成功率 | 0.00118017~2,小数位最多 10 | 原始区字符串;事实 DECIMAL(12,10) |
32 条 >1 只在原始区/错误表留痕,事实和发布值为空 |
| RRC 连接最大数 | 0~224,源值含 .0 |
DECIMAL(20,6) |
不转整数,不冒充当前连接数 |
| PDCP PDU 字节数 | 0~38,813,556,小数位最多 6 | DECIMAL(30,6) |
不因“字节”语义擅自取整;是否应为整数待确认 |
| NCI | 10,579,931,147~10,835,296,272 | BIGINT UNSIGNED |
作为标识,不做算术聚合 |
| 带宽 | 60 或 100 | DECIMAL(8,3) MHz |
保留将来非整数输入能力,不从字符串截断 |
| 平均底噪 | -117.063156~-96.076730,6 位小数 | DECIMAL(10,6) dBm |
观测范围不是业务有效范围;有效范围待确认 |
| 上/下行频点 | 44,092 条均为 0.0 |
原始区字符串;事实 DECIMAL(15,3) NULL |
原值 0 留痕,事实置空并标 NA_INVALID_ZERO,不进入频点分析 |
当前最长字符串:cgi 17、nci 11、cell_name/omc_cell_name 31、omc_gnodeb_name 29。DDL 留出受控余量,但未使用无界 TEXT 代替可索引标识。
3. 完整源字段映射
3.1 两表共有 19 列(每列在每个数据集恰好一条映射,共 38 个列出现次)
| CSV 列 | ClickHouse 含义字段 | 性能原始 → 事实 | 干扰原始 → 事实 | 校验规则 |
|---|---|---|---|---|
datatime |
datatime |
raw_datatime → business_time DATETIME(0) |
同左 | 必须精确到整点,格式 yyyy-MM-dd HH:mm:ss |
province |
province |
raw_province → province_name VARCHAR(128) |
同左 | 非空,去首尾空白但不改内容 |
city_id |
city_id |
raw_city_id → city_id VARCHAR(64) |
同左 | 非空标识,不转数值 |
city_name |
city_name |
raw_city_name → city_name VARCHAR(128) |
同左 | 非空 |
area_id |
area_id |
raw_area_id → area_id VARCHAR(64) |
同左 | 非空标识;0 是合法标识,不补写其他值 |
area_name |
area_name |
raw_area_name → area_name VARCHAR(128) |
同左 | 非空 |
verdor |
verdor |
raw_vendor → vendor_name VARCHAR(128) |
同左 | 保留源拼写映射,目标统一命名 |
cgi |
cgi |
raw_cgi → cgi VARCHAR(64) |
同左 | 非空;与业务时间共同幂等 |
nci |
nci |
raw_nci → nci BIGINT UNSIGNED |
同左 | 十进制非负整数且不溢出 |
cell_name |
cell_name |
raw_cell_name → cell_name VARCHAR(256) |
同左 | 非空 |
omc_cell_name |
omc_cell_name |
raw_omc_cell_name → omc_cell_name VARCHAR(256) |
同左 | 非空 |
omc_gnodeb_name |
omc_gnodeb_name |
raw_gnodeb_name → gnodeb_name VARCHAR(256) |
同左 | 非空 |
cover_type |
cover_type |
raw_cover_type → cover_type VARCHAR(32) |
同左 | 非空;枚举未确认,不擅自限制 |
region_level |
region_level |
raw_region_level → region_level VARCHAR(32) |
同左 | 非空;枚举未确认,不擅自限制 |
first_scene_name |
first_scene_name |
raw_first_scene_name → 同名 VARCHAR(128) |
同左 | 非空 |
second_scene_name |
second_scene_name |
raw_second_scene_name → 同名 VARCHAR(128) |
同左 | 非空 |
network_standard |
network_standard |
raw_network_standard → 同名 VARCHAR(32) |
同左 | 非空;当前为 NR,不以样本唯一值固化 CHECK |
band |
band |
raw_band → band VARCHAR(32) |
同左 | 非空;当前为 2.6G,不以样本唯一值固化 CHECK |
bandwidth_down |
bandwidth_down |
raw_bandwidth_down → bandwidth_down_mhz DECIMAL(8,3) |
同左 | 数值且 >0,单位 MHz |
3.2 性能专有 9 列
| CSV 列 | ClickHouse 对应 | 原始列 → 有效事实列 | 发布 metric_code |
校验 / 降级 |
|---|---|---|---|---|
无线接通率 |
wirelesssuccconnrate |
raw_wireless_access_rate → wireless_access_rate DECIMAL(12,10) |
WIRELESS_ACCESS_RATE |
0~1;否则只留痕并发布无值 N/A |
无线掉线率(小区级) |
wirelessdroprate_celllevel |
raw_wireless_drop_rate → wireless_drop_rate DECIMAL(12,10) |
WIRELESS_DROP_RATE |
0~1;无分子分母,禁止跨小区/跨时间均值 |
RRC连接建立成功率 |
rrcsuccconnrate |
raw_rrc_setup_success_rate → rrc_setup_success_rate DECIMAL(12,10) |
RRC_SETUP_SUCCESS_RATE |
0~1;低值劣化动态基线与预测 |
RRC连接最大数 |
rrc_connmax |
raw_rrc_connection_max → rrc_connection_max DECIMAL(20,6) |
RRC_CONNECTION_MAX |
非负;保留小数;不是当前连接总数 |
上行业务信息PRB占用率 |
dtchprbassnrateul |
raw_prb_ul_usage_rate → prb_ul_usage_rate DECIMAL(12,10) |
PRB_UL_USAGE_RATE |
空值保持空;有效值 0~1 |
下行业务信息PRB占用率 |
dtchprbassnratedl |
raw_prb_dl_usage_rate → prb_dl_usage_rate DECIMAL(12,10) |
PRB_DL_USAGE_RATE |
空值保持空;有效值 0~1 |
切换成功率 |
hosuccoutrate |
raw_handover_success_rate → handover_success_rate DECIMAL(12,10) |
HANDOVER_SUCCESS_RATE |
0~1;32 条越界值不进入事实值和任何计算 |
小区用户面上行PDCP PDU字节数 |
pdcp_upoctul |
`raw_…69406 tokens truncated…本数的描述性对比。 |
- 同一小时底噪与性能指标同时变化只能作为候选证据,不得表述为因果关系或已确认干扰根因。
- 选择底噪时间点时提供"查看同时段性能",跳转无线性能分析并继承小区、时间范围和选中时间点。
- 热力图单元格点击 → 阶梯折线图切换至该小区时序 + 柱状图高亮该小区;散点图点击异常点 → 弹出关联小区列表(可跳转至无线性能分析页),联动逻辑由前端驱动。
4.4 服务端输出、降级与可访问性
- 监控查询响应至少携带
traceId、发布运行号、可用性状态、时效性状态、证据完整性状态、最新发布时间、源值、源单位和N/A原因;需要判断的指标同时返回静态阈值、动态中心/上下限及各自状态。 - 服务端分别提供页面状态、矩阵/排行、趋势/周期、同小时关联证据和分页明细;不得要求前端下载全量记录后自行聚合。
- 证据为部分数据时以当前可用的单表发布结果为主;旧的完整证据只能作为独立的“最后完整证据”展示并标明原查询快照和时间,不得替代当前单表结果。证据为无数据时显示当前查询空状态,不显示旧结果。
- 可用性为离线、时效性为延迟或查询失败时可保留最后一次成功发布结果,并在结果上方分别显示三个状态轴、更新时间和可复制
traceId;最后成功结果必须绑定其原始查询快照,新查询条件失败时不得将旧结果显示在新条件下,旧结果也不得伪装为实时数据。 - 关键值、状态和阈值不依赖悬浮提示;状态同时使用文字和颜色。移动端将宽矩阵降级为异常优先列表,通过筛选抽屉和详情抽屉保留同一分析路径。
- 所有
N/A保持缺失语义,不参与补点、插值、均值或异常判断。服务端返回稳定排序键、顺序和N/A排位;前端只提交排序条件并展示服务端结果。
5. 告警与候选诊断
5.1 动态基线
动态基线使用 Median/MAD,不使用固定的全网统一底噪值。按 (cgi, metric_code, hour_of_day) 汇总近 30 个自然日的健康有效小时样本:
center = median(x)
scale = max(1.4826 * MAD(x), floor)
| 规则 | 要求 |
|---|---|
| 启动条件 | 至少 14 个健康有效日;数据完整率满足已发布要求;告警时间片不进入健康样本 |
| 低值劣化指标 | 无线接通率、切换成功率、RRC 连接建立成功率的动态下限为 max(0, center - k * scale) |
| 高值劣化指标 | 无线掉线率、平均底噪、RRC 连接最大数、上/下行 PRB 占用率、上/下行 PDCP PDU 字节数的动态上限为 center + k * scale |
| 样本不足 | 不生成或复用新基线,页面显示“基线数据不足”;不因缺少基线自动判定正常或异常 |
| 结果留痕 | 保存中心值、尺度、上下限、样本数、有效日期范围、参数版本、计算时间和发布运行号 |
k 和 floor 在首次上线时按版本发布。每个版本必须完整包含当前生产矩阵的十项指标;不能发布仅含预测 KPI 的局部版本,否则会导致其余动态基线配置被整版替代。首次生产版发布后配置域永久锁定,应用接口、页面、调度和脚本只读,后续变更只能经负责人批准后使用带审计和 X-Trace-Id 的手工 SQL 创建新版本。有结果引用的历史版本继续保留追溯。配置版本的创建、校验、发布时间和同链路审计时间统一使用应用 Asia/Shanghai 时钟,数据库连接固定 +08:00,不得在同一生命周期混用数据库 CURRENT_TIMESTAMP。静态合同阈值与动态基线越界必须分别标识,不能混为同一告警证据。
5.1.1 生产启用配置
当前生产启用版统一使用:historyWindowDays=30、minTrainingDays=30、minCompletenessRate=0.95、forecastHorizonHours=48、riskLookaheadHours=12、warningConsecutivePoints=2、highRiskConsecutivePoints=4、primaryModelType=XGBOOST、fallbackModelType=HOLT_WINTERS。训练参数固定为候选刷新 24h、离线验证 168h、树深 4、学习率 0.05、行/列采样率 0.8、最小子节点权重 5、最大轮数 300、早停 30、Holt-Winters 季节周期 24h 并启用阻尼趋势。
下表数值均为数据库存储单位,WAPE 使用比例值;十项配置必须位于同一个启用版本:
| 指标编码 | 动态方向 | k | floor | 最小有效日 | MAE 上限 | RMSE 上限 | WAPE 上限 |
|---|---|---|---|---|---|---|---|
HANDOVER_SUCCESS_RATE |
LOW | 3 | 0.003 | 14 | 0.0087166585 | 0.0255039558 | 0.0087775645 |
MEAN_NOISE_DBM |
HIGH | 3 | 0 | 14 | 0.9291622768 | 2.2516559464 | 0.0079947593 |
PDCP_DL_BYTES |
HIGH | 3 | 0 | 14 | 534773.7654053480 | 1172014.0470620925 | 0.3555818894 |
PDCP_UL_BYTES |
HIGH | 3 | 0 | 14 | 761498.6124863969 | 1677571.7265469353 | 0.5321733280 |
PRB_DL_USAGE_RATE |
HIGH | 3 | 0.003 | 14 | 0.0054490440 | 0.0096011808 | 0.3487552312 |
PRB_UL_USAGE_RATE |
HIGH | 3 | 0.003 | 14 | 0.0447775278 | 0.0897051538 | 0.5752517943 |
RRC_CONNECTION_MAX |
HIGH | 3 | 0 | 14 | 4.0260416667 | 6.7582511298 | 0.1738250506 |
RRC_SETUP_SUCCESS_RATE |
LOW | 3 | 0.003 | 14 | 0.0103950115 | 0.0177432682 | 0.0104884654 |
WIRELESS_ACCESS_RATE |
LOW | 3 | 0.0025 | 21 | 0.00258 | 0.015 | 0.003 |
WIRELESS_DROP_RATE |
HIGH | 3 | 0.001 | 21 | 0.0008 | 0.004 | 1.8 |
5.2 48 小时趋势预测
预测以无线接通率、无线掉线率两个核心 KPI 的 (cgi, metric_code) 小时序列为目标运行,不为其余配置指标单独生成预测。当前可用特征为小时、星期、1/2/24/168 小时滞后值、RRC 连接最大数、上下行 PRB 占用率、上下行 PDCP PDU 字节数和已发布动态基线。
| 规则 | 要求 |
|---|---|
| 主模型 | XGBoost,用于捕捉多变量、非线性和日/周周期特征 |
| 兜底模型 | Holt-Winters,仅在 XGBoost 因数据或验证不满足发布条件时使用 |
| 训练与发布 | 至少 30 天连续历史数据,近 30 天完整率不低于 95%,离线验证通过后才能发布未来 48 小时结果 |
| 单一结果 | 同一 (cgi, metric_code, target_time, publish_run) 只发布一个 model_type 的预测结果;候选模型不得各自发告警 |
| 预测告警 | 已发布预测在未来 12 小时内连续两个点跨越已发布动态基线时,生成预测性告警并附预计劣化时间与核查窗口 |
| 降级 | 基线不足时显示“基线数据不足”;基线可用但预测不可用时只显示实际值和基线,明确显示“预测数据不足”或“模型验证未通过” |
5.2.1 预测结果与风险排序
每个已发布预测点必须保存:实际历史截止时间、目标时间、预测值、关联基线上下限、是否越界、连续越界点数、预计劣化时间、model_type、模型版本、特征版本、验证状态和发布运行号。
预测风险分析使用小区和核心 KPI 对应的已发布风险摘要作为预测主图的辅助证据,不重新计算模型结果。风险级别由配置决定,最小规则如下:
| 风险状态 | 触发条件 | 页面呈现 |
|---|---|---|
| 正常 | 预测窗口内未跨越动态基线 | 显示最后预测时间和模型状态 |
| 关注 | 未来 12 小时连续 2 个预测点跨越动态基线 | 黄色预测性告警、预计劣化时间、核查窗口 |
| 高风险 | 连续越界点数达到配置的升级阈值,或预测同时跨越动态基线和静态合同阈值 | 红色风险标识、关联告警、优先处置排序 |
| 不可用 | 基线不足、训练数据不足或模型验证未通过 | 明确不可用原因,不生成风险等级或告警 |
风险排行按严重度、预计劣化时间、连续越界点数和影响指标数排序。系统不得输出未经计算的“置信度百分比”;仅展示已保存的验证状态、回测误差和数据完整率。
5.2.2 模型运行、回测与发布
| 阶段 | 规则 | 可见结果 |
|---|---|---|
| 特征检查 | 校验小时/星期、滞后值、RRC、PRB、PDCP 流量和基线特征是否齐全 | 特征覆盖率、缺失字段、可训练/不可训练原因 |
| 训练 | 以训练截止时间之前的数据训练候选模型,不覆盖已发布版本 | 模型类型、训练范围、训练截止时间、模型版本 |
| 回测 | 使用训练后已到达实际值的时间片计算 MAE、RMSE、WAPE;分母为 0 时 WAPE 标记 N/A |
指标误差、样本数、验证状态、失败原因 |
| 发布 | 只有通过当前指标配置的验证阈值的候选模型可发布;同一对象/指标仅一个生效版本 | 发布运行号、生效模型、发布时间、回滚目标 |
| 回滚 | 运行失败、验证失效或管理员停用时,停止新预测发布,保留上一个已发布版本和审计记录 | 当前状态、原因、最后成功版本 |
模型配置的验证阈值、升级阈值、最小训练天数和完整率要求均版本化。生产首次发布后管理员只读查看配置,普通用户只读模型状态和预测结果;后续配置变更仅允许经审批的手工 SQL。
5.3 阈值与基线告警
阈值在首次上线时以版本方式发布,生产发布后配置域永久锁定,应用接口、页面、调度和脚本只读。JOB_RULE_ALARM 创建 tb_publish_run 时必须原子固化当时的 threshold_version_id,本次运行的评估、告警和证据 SQL 只能按该快照读取规则,不得在执行中重新查询当前 PUBLISHED 阈值版;至少支持:
| 指标 | 劣化方向 | 用途 |
|---|---|---|
| 无线接通率 | 低于阈值 | 接通质量告警 |
| 无线掉线率 | 高于阈值 | 掉线质量告警 |
| 切换成功率 | 低于阈值 | 切换质量告警 |
| RRC 连接最大数 | 高于阈值 | 负荷风险证据 |
| 上/下行 PRB 占用率 | 高于阈值 | 负荷风险证据 |
| 平均底噪 | 高于阈值 | 干扰风险证据 |
没有已发布静态阈值的指标只展示原始趋势;基线已发布时仍可生成“趋势异常”。没有静态阈值且基线数据不足时不生成告警。
5.4 可解释候选诊断规则
| 规则 | 条件 | 输出 |
|---|---|---|
| 干扰风险候选 | 接通率或掉线率发生静态阈值或动态基线越界,且同一 (cgi, datatime) 的平均底噪越过静态阈值或动态上限 |
“上行噪声或干扰风险待核验”,展示指标值、阈值/基线和样本状态 |
| 负荷/容量风险候选 | RRC 连接最大数及上、下行 PRB 占用率在同一时间片均超过静态阈值或动态上限 | “负荷/容量风险待核验”,展示 RRC、PRB、流量和阈值/基线证据 |
| 切换性能异常候选 | 切换成功率低于静态阈值或动态下限 | “切换性能异常待核验”,展示当前值和阈值/基线 |
| 预测风险候选 | 已发布预测在未来 12 小时连续两个点越过动态基线 | “性能劣化风险待核验”,展示预计劣化时间、预测值、基线和核查窗口 |
| 证据不足 | 关联记录缺失、字段为空或仅一个证据满足 | “待观察或人工补充证据”,不得输出具体根因 |
规则输出只能是候选原因和核查建议,不得显示为“已确认根因”。所有参数调整类建议必须标记“需审批”,系统不提供下发入口。
5.5 告警生命周期
状态固定为:新建 -> 已认领 -> 处理中 -> 待验证 -> 已关闭。验证失败可回到处理中;同一对象、指标、告警类型在生效去重窗口内合并。预测性告警在实际值到达后追加“预测命中/未命中”验证记录,不因预测窗口结束自动关闭。只有管理员可执行最终关闭和重开。
6. 调度、权限与审计
6.1 预置任务
| 顺序 | 任务编码 | 任务名称 | 成功输出 |
|---|---|---|---|
| 1 | JOB_IMPORT_PERF |
性能 CSV 定时导入 | 性能原始记录、导入批次 |
| 2 | JOB_IMPORT_INTERFERENCE |
干扰 CSV 定时导入 | 干扰原始记录、导入批次 |
| 3 | JOB_METRIC_PUBLISH |
无线指标结果发布 | 前端可读性能/干扰关联结果 |
| 4 | JOB_BASELINE |
动态基线计算 | 已发布基线或“样本不足”运行结果 |
| 5 | JOB_PREDICTION |
48 小时趋势预测 | 已发布预测或“预测数据不足/验证未通过”运行结果 |
| 6 | JOB_FORECAST_EVALUATION |
预测回测与模型状态更新 | 回测误差、验证状态、模型运行记录 |
| 7 | JOB_RULE_ALARM |
阈值/趋势异常/预测性告警与候选诊断 | 告警、诊断快照、通知任务 |
下游任务仅消费上游成功且已发布的运行号。任务失败、停止或未发布时,不产生半成品告警。
6.2 角色
| 能力 | ROLE_USER | ROLE_ADMIN |
|---|---|---|
| 查询性能、干扰、告警和诊断 | 是 | 是 |
| 查询基线和预测 | 是 | 是 |
| 认领、处置、提交验证、申请关闭 | 是 | 是 |
| 最终关闭/重开告警 | 否 | 是 |
| 调度启停、手动执行、停止 | 否 | 是 |
| 阈值与告警策略发布 | 否 | 否(生产固化,变更走审批 SQL) |
| 基线配置发布 | 否 | 否(生产固化,变更走审批 SQL) |
| 模型发布与回滚 | 否 | 是 |
| 审计查询与导出 | 否 | 是 |
前端菜单可见性不构成权限控制,所有接口由后端校验角色、对象状态和版本。
6.3 Trace 与中文日志
每个 HTTP 请求携带 X-Trace-Id。同一用户操作链在前端日志、后端日志、错误响应、调度实例和审计 request_id 中使用同一个值。
新增或变更接口必须有中文日志和中文说明,说明业务目的、触发条件、处理原因和结果;不得只记录“成功”或“失败”。日志和响应不得包含密码、token、密钥、完整 CSV 内容、SQL 或内部堆栈。
7. 验收标准
| 验收项 | 最小通过标准 |
|---|---|
| CSV 导入 | 性能和干扰表头样例及完整时序校验文件可分别导入;字段缺失、重复记录和错误时间格式被拒绝并记录原因 |
| 数据语义校验 | 比例越界、无效频点及其他违反已发布数据字典的值可在受控原始区留痕,但不得被截断、补零或进入发布、基线、告警和诊断结果 |
| 数据关联 | 同一 cgi + datatime 的性能、干扰数据可关联;只有单表结果时仍可查看源指标,但页面明确提示关联证据不足且不产生跨表候选原因 |
| 数据状态 | 页面分别展示性能最新时间、干扰最新时间、最新共同证据时间、性能/干扰各自的收到记录数和缺失字段数、无法关联记录数;可用性、时效性、证据完整性三个状态轴与后端发布状态一致,未确认应收计划时时效性只能为未知;无数据时不显示旧结果 |
| 无线性能态势 | 能按基站/小区和 KPI 展示最新值,并分别展示静态阈值状态/越界小时数和动态基线状态/越界小时数;选择矩阵单元格后趋势、证据和明细同步到同一对象、指标和时间 |
| 性能趋势与周期 | 日期-小时矩阵、实际值、静态阈值、动态基线及前一小时/前一天同小时/前一周同小时值均与服务端发布结果一致,前端不自行计算结论 |
| 负荷与流量联动 | 质量 KPI、RRC/PRB 和 PDCP 使用共享时间轴分别展示;任一 PRB 为 N/A 时不输出完整负荷候选证据 |
| 干扰态势与周期 | 能展示小区-小时或日期-小时状态矩阵、24 小时动态中心/上限、实际底噪、样本数和数据不足状态;不使用全网统一底噪均值替代小区小时槽基线 |
| 性能/干扰联动 | 性能和底噪页面可按同一 cgi + datatime 双向跳转并恢复共享 URL 参数;性能跳转后默认进入干扰态势,干扰页点击分面散点后按该点性能指标进入无线性能分析;关联数据缺失时显示证据不足,不输出因果或已确认根因 |
| 查询粒度与矩阵 | HOUR、DAY、MONTH 选项与服务端已发布粒度一致;干扰态势的 HOUR 范围不超过 24 小时时展示小区-小时矩阵,超过 24 小时时要求选择小区并展示日期-小时矩阵;性能异常态势保持小区-KPI 矩阵 |
| 频点降级 | 当前校验文件的频点 0 在口径确认前展示 N/A 并隐藏频点筛选、排行和时频图;生产频点是否有效以已发布数据字典为准 |
| 指标展示 | 三项无线 KPI、RRC 连接建立成功率、RRC 连接最大数、PRB、PDCP PDU 字节数、平均底噪和有效频点按源值、源单位、小时粒度展示;空值为 N/A |
| 页面降级与可访问性 | 部分数据时当前单表结果优先,旧完整证据独立标记;无数据时只显示当前空状态;离线、延迟或查询失败时保留的最后成功结果绑定原查询快照,新条件失败时不得显示旧条件结果;状态同时使用文字和颜色,移动端可通过异常列表完成同一分析路径 |
| 动态基线 | 少于 14 个健康有效日时显示“基线数据不足”;满足条件的验收数据按 Median/MAD 公式生成中心、尺度和上下限 |
| 趋势预测 | 少于 30 天或完整率低于 95% 时不发布预测;满足条件的验收数据由 XGBoost 或验证通过的 Holt-Winters 发布未来 48 小时结果,且同一目标时间仅一个模型结果 |
| 风险驾驶舱 | 风险排行、预计劣化时间、连续越界点数和预测告警与同一发布运行号的预测结果一致;不可用模型明确呈现原因 |
| 模型回测与治理 | 能查询特征覆盖、训练范围、MAE/RMSE/WAPE、验证状态和发布版本;验证失败不发布,回滚后保留历史与审计 |
| 阈值/趋势异常 | 有效静态阈值或已发布基线按正确方向触发相应告警;无静态阈值且基线不足时不发告警 |
| 候选诊断 | 干扰、负荷、切换和证据不足四类规则输出正确证据与候选文案,不自动确认根因 |
| 告警闭环 | 认领、处置、验证、关闭/重开操作按角色和状态校验,并保留动作历史 |
| 调度与发布 | 上游失败时下游跳过;前端只看到最后成功的发布结果 |
| 生产配置固化 | 阈值与告警策略、基线与预测配置首次发布后,页面和接口均只读;ALARM 发布运行的 threshold_version_id 非空且评估 SQL 只按该快照读规则;十项分析参数与第 5.1.1 节矩阵完全一致;配置生命周期与审计使用同一应用时钟 |
| Trace 与审计 | 一次接口请求能以同一 X-Trace-Id 串联前端日志、响应、后端日志和审计记录 |
8. 后续能力的启用条件
以下不是本期需求。只有满足条件后,才另行评审并形成新版本需求:
| 能力 | 必要前提 |
|---|---|
| 15 分钟分析 | 外部稳定交付 15 分钟数据,并定义迟到数据与聚合规则 |
| 频点分析 | 上、下行频点稳定提供符合已发布数据字典的有效值,数据字典明确平均底噪对应的频点方向、单位和关联口径 |
| 管道/业务分析 | 提供实体标识、指标目录、单位、时延/体验字段及与小区的关联关系 |
| 数字孪生 | 定义实体关系、状态口径和展示目标;若需要空间视图,还需坐标或离线平面图 |
| 月度报告 | 连续完整的跨月数据、报告统计口径、权限范围和签发模板 |
本版本不以样例数据不足为由伪造算法结果或预测告警。后续能力启用后,必须重新补充数据契约、接口、验收用例和页面需求。