|
|
-- ============================================================
|
|
|
-- 采集分析日志表 + 采集周期汇总表(幂等迁移脚本)
|
|
|
-- 创建时间:2026-05-05
|
|
|
-- 说明:在 cnc_log 库中新增两张按月分区表
|
|
|
-- log_collect_analysis: 每次采集、每台机床的分析记录
|
|
|
-- log_collect_cycle: 每次采集周期的汇总信息
|
|
|
-- 执行前提:USE cnc_log; 已执行 01-init-schema.sql
|
|
|
-- ============================================================
|
|
|
|
|
|
USE cnc_log;
|
|
|
|
|
|
-- -----------------------------------------------------------
|
|
|
-- 1. 采集分析日志表 log_collect_analysis(按月分区)
|
|
|
-- 记录每次采集后对每台机床的数据变化分析
|
|
|
-- -----------------------------------------------------------
|
|
|
DROP TABLE IF EXISTS log_collect_analysis;
|
|
|
CREATE TABLE log_collect_analysis (
|
|
|
id BIGINT AUTO_INCREMENT,
|
|
|
analysis_time DATETIME NOT NULL COMMENT '分析时间(分区键)',
|
|
|
raw_log_id BIGINT NOT NULL COMMENT '关联原始日志ID(log_collect_raw.id)',
|
|
|
collect_address_id INT NOT NULL COMMENT '采集地址ID(关联cnc_collect_address)',
|
|
|
machine_id INT NOT NULL COMMENT '机床ID(关联cnc_machine)',
|
|
|
analysis_type VARCHAR(30) NOT NULL COMMENT '分析类型:NORMAL_UNCHANGED/PART_COUNT_INCREASE/PROGRAM_SWITCH/MANUAL_RESET/DEVICE_ONLINE/DEVICE_OFFLINE/NEW_DEVICE_FOUND/DATA_ANOMALY/COLLECTION_FAILED',
|
|
|
previous_program VARCHAR(200) NULL COMMENT '上一次NC程序名',
|
|
|
current_program VARCHAR(200) NULL COMMENT '本次NC程序名',
|
|
|
previous_part_count DECIMAL(15,5) NULL COMMENT '上一次零件计数',
|
|
|
current_part_count DECIMAL(15,5) NULL COMMENT '本次零件计数',
|
|
|
part_count_delta DECIMAL(15,5) NULL COMMENT '零件计数变化量(正=增加,负=减少)',
|
|
|
previous_status VARCHAR(20) NULL COMMENT '上一次设备状态',
|
|
|
current_status VARCHAR(20) NULL COMMENT '本次设备状态',
|
|
|
analysis_summary VARCHAR(500) NOT NULL COMMENT '人类可读的分析摘要',
|
|
|
analysis_detail JSON NULL COMMENT '完整的字段级对比数据(JSON)',
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
PRIMARY KEY (id, analysis_time),
|
|
|
INDEX idx_address_time (collect_address_id, analysis_time),
|
|
|
INDEX idx_machine_time (machine_id, analysis_time),
|
|
|
INDEX idx_type_time (analysis_type, analysis_time),
|
|
|
INDEX idx_raw_log (raw_log_id),
|
|
|
INDEX idx_program_time (current_program, analysis_time)
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
|
COMMENT='采集分析日志表(按月分区,记录每次采集对每台机床的数据变化分析)'
|
|
|
PARTITION BY RANGE (TO_DAYS(analysis_time)) (
|
|
|
PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
|
|
|
PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01')),
|
|
|
PARTITION p202607 VALUES LESS THAN (TO_DAYS('2026-08-01')),
|
|
|
PARTITION p_future VALUES LESS THAN MAXVALUE
|
|
|
);
|
|
|
|
|
|
-- -----------------------------------------------------------
|
|
|
-- 2. 采集周期汇总表 log_collect_cycle(按月分区)
|
|
|
-- 记录每次采集周期(一个地址的一次完整采集)的汇总信息
|
|
|
-- -----------------------------------------------------------
|
|
|
DROP TABLE IF EXISTS log_collect_cycle;
|
|
|
CREATE TABLE log_collect_cycle (
|
|
|
id BIGINT AUTO_INCREMENT,
|
|
|
cycle_time DATETIME NOT NULL COMMENT '周期开始时间(分区键)',
|
|
|
collect_address_id INT NOT NULL COMMENT '采集地址ID(关联cnc_collect_address)',
|
|
|
raw_log_id BIGINT NOT NULL COMMENT '关联原始日志ID(log_collect_raw.id)',
|
|
|
end_time DATETIME NULL COMMENT '周期结束时间',
|
|
|
duration_ms INT NULL COMMENT '本次采集总耗时(毫秒)',
|
|
|
total_machines INT NOT NULL DEFAULT 0 COMMENT '本周期采集的机床总数',
|
|
|
success_count INT NOT NULL DEFAULT 0 COMMENT '成功采集的机床数',
|
|
|
fail_count INT NOT NULL DEFAULT 0 COMMENT '失败采集的机床数',
|
|
|
change_distribution JSON NULL COMMENT '变化类型分布(如 {"PROGRAM_SWITCH":2,"PART_COUNT_INCREASE":5,"NORMAL_UNCHANGED":3})',
|
|
|
has_anomaly TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否存在异常(1=有异常:DATA_ANOMALY/COLLECTION_FAILED/DEVICE_OFFLINE)',
|
|
|
cycle_summary VARCHAR(500) NULL COMMENT '人类可读的周期汇总',
|
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
PRIMARY KEY (id, cycle_time),
|
|
|
INDEX idx_address_time (collect_address_id, cycle_time),
|
|
|
INDEX idx_time (cycle_time),
|
|
|
INDEX idx_anomaly_time (has_anomaly, cycle_time)
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
|
|
|
COMMENT='采集周期汇总表(按月分区,每次采集周期的汇总信息)'
|
|
|
PARTITION BY RANGE (TO_DAYS(cycle_time)) (
|
|
|
PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
|
|
|
PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01')),
|
|
|
PARTITION p202607 VALUES LESS THAN (TO_DAYS('2026-08-01')),
|
|
|
PARTITION p_future VALUES LESS THAN MAXVALUE
|
|
|
);
|
|
|
|
|
|
-- -----------------------------------------------------------
|
|
|
-- 3. 为现有 log_collect_raw 表增加补充索引
|
|
|
-- 支持按采集成功/失败筛选,以及按响应时长分析
|
|
|
-- -----------------------------------------------------------
|
|
|
-- 检查索引是否已存在,若不存在则添加(幂等)
|
|
|
SET @exist := (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
|
WHERE TABLE_SCHEMA = 'cnc_log' AND TABLE_NAME = 'log_collect_raw' AND INDEX_NAME = 'idx_success_time');
|
|
|
SET @sqlstmt := IF(@exist = 0,
|
|
|
'ALTER TABLE cnc_log.log_collect_raw ADD INDEX idx_success_time (is_success, request_time)',
|
|
|
'SELECT ''索引 idx_success_time 已存在,跳过''');
|
|
|
PREPARE stmt FROM @sqlstmt;
|
|
|
EXECUTE stmt;
|
|
|
DEALLOCATE PREPARE stmt;
|