动态运行参数 my_new_key - > 需要存储数据库的上级key; sync-interval-ms - > 存储时间间隔 java -jar TimescaleDB-Utils.jar \ --spring.redis.queue-key=my_new_key \ --spring.redis.sync-interval-ms=2000 //卷接机表 -- 创建主表 CREATE TABLE roller_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, -- 设为 NOT NULL 因为您有固定的 key 列表 shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 您的业务字段 online INTEGER, -- 网络状态(0异常 1正常) qty DOUBLE PRECISION, -- 产量 bad_qty DOUBLE PRECISION, -- 剔除产量 lvbang_val DOUBLE PRECISION, -- 滤棒消耗 juanyanzhi_val DOUBLE PRECISION, -- 卷烟纸消耗 shuisongzhi_val DOUBLE PRECISION, -- 水松纸消耗 run_time DOUBLE PRECISION, -- 运行时间 stop_time DOUBLE PRECISION, -- 停机时间 stop_times INTEGER, -- 停机次数 speed INTEGER, -- 车速 run_status INTEGER, -- 运行状态(-1断网 0停止 1低速运行 2正常运行) cy DOUBLE PRECISION, -- 储烟设备储量 cy_cs INTEGER, -- 储烟设备车速(1-包装机 6-卷烟机) cy_online TEXT, -- (22-卷烟机运行状态 23-包装机运行状态) rec_qty1 DOUBLE PRECISION, -- 接收机量 rec_qty2 DOUBLE PRECISION -- 接收机量2 ); -- 将表转换为超表(按天分区,按key进行空间分区) SELECT create_hypertable( 'roller_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区) -- 分成 8 个分区,每个分区大约包含 4-5 个 key SELECT add_dimension( 'roller_time_data', 'key', number_partitions => 8 ); -- 创建索引以提高查询性能 -- 复合索引,适合按时间和key查询 CREATE INDEX idx_roller_time_data_time_key ON roller_time_data (time DESC, key); -- 单独索引,适合按key查询 CREATE INDEX idx_roller_time_data_key_time ON roller_time_data (key, time DESC); -- 业务查询常用字段索引 CREATE INDEX idx_roller_time_data_run_status_key ON roller_time_data (run_status, key, time DESC); CREATE INDEX idx_roller_time_data_online_key ON roller_time_data (online, key, time DESC); CREATE INDEX idx_roller_time_data_speed_key ON roller_time_data (speed, key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_roller_time_data_shift ON roller_time_data (shift); CREATE INDEX idx_roller_time_data_equ_no ON roller_time_data (equ_no); -- 可选:如果某些设备数据量特别大,可以为特定设备创建专用索引 -- CREATE INDEX idx_roller_1101 ON roller_time_data (time DESC) WHERE key = '1101'; //包装机 -- 创建主表 CREATE TABLE packer_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 您的业务字段 online INTEGER, -- 网络状态(0异常,1正常) qty DOUBLE PRECISION, -- 产量 bad_qty DOUBLE PRECISION, -- 剔除产量 xiaohemo_val DOUBLE PRECISION, -- 小盒膜消耗 tiaohemo_val DOUBLE PRECISION, -- 条盒膜消耗 xiaohezhi_val DOUBLE PRECISION, -- 小盒纸消耗 tiaohezhi_val DOUBLE PRECISION, -- 条盒纸消耗 neichenzhi_val DOUBLE PRECISION, -- 内衬纸消耗 run_time DOUBLE PRECISION, -- 运行时间 stop_time DOUBLE PRECISION, -- 停机时间 stop_times INTEGER, -- 停机次数 speed INTEGER, -- 车速 run_status INTEGER, -- 运行状态(-1 断网 0停止 1低速运行 2正常运行) ts_qty DOUBLE PRECISION, -- 提升机产量 main_qty DOUBLE PRECISION, -- 主机产量(小包机) main_bad_qty DOUBLE PRECISION, -- 主机剔除量 tbj_qty DOUBLE PRECISION, -- 透包机产量 tbj_gd_qty DOUBLE PRECISION, -- 透包机剔除好包 tbj_bad_qty DOUBLE PRECISION, -- 透包机剔除坏包 pbj_qty DOUBLE PRECISION -- 排包机产量 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'packer_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'packer_time_data', 'key', number_partitions => 8 ); -- 创建复合索引(时间+key) CREATE INDEX idx_packer_time_data_time_key ON packer_time_data (time DESC, key); -- 创建反向复合索引(key+时间) CREATE INDEX idx_packer_time_data_key_time ON packer_time_data (key, time DESC); -- 创建运行状态相关索引 CREATE INDEX idx_packer_run_status_key ON packer_time_data (run_status, key, time DESC); -- 创建网络状态索引 CREATE INDEX idx_packer_online_key ON packer_time_data (online, key, time DESC); -- 创建车速索引 CREATE INDEX idx_packer_speed_key ON packer_time_data (speed, key, time DESC); -- 创建产量相关索引(常用统计查询) CREATE INDEX idx_packer_qty_key ON packer_time_data (qty, key, time DESC); -- 创建停机相关索引 CREATE INDEX idx_packer_stop_key ON packer_time_data (stop_times, key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_packer_time_data_shift ON packer_time_data (shift); CREATE INDEX idx_packer_time_data_equ_no ON packer_time_data (equ_no); //装箱机 -- 创建主表 CREATE TABLE box_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 您的业务字段 online INTEGER, -- 网络状态 0异常,1正常 qty1 DOUBLE PRECISION, -- 1#装封箱机产量 pbj_qty DOUBLE PRECISION -- 排包机产量 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'box_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'box_time_data', 'key', number_partitions => 8 ); -- 创建复合索引(时间+key) - 主查询模式 CREATE INDEX idx_box_time_data_time_key ON box_time_data (time DESC, key); -- 创建反向复合索引(key+时间) - 按设备查询 CREATE INDEX idx_box_time_data_key_time ON box_time_data (key, time DESC); -- 创建网络状态索引 CREATE INDEX idx_box_online_key ON box_time_data (online, key, time DESC); -- 创建产量索引(常用于统计查询) CREATE INDEX idx_box_qty1_key ON box_time_data (qty1, key, time DESC); CREATE INDEX idx_box_pbj_qty_key ON box_time_data (pbj_qty, key, time DESC); -- 创建复合产量索引(同时查询两个产量字段) CREATE INDEX idx_box_qtys_key ON box_time_data (qty1, pbj_qty, key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_box_time_data_shift ON box_time_data (shift); CREATE INDEX idx_box_time_data_equ_no ON box_time_data (equ_no); //成型机 -- 创建主表 CREATE TABLE makeup_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 您的业务字段 online INTEGER, -- 网络状态 0异常,1正常 qty DOUBLE PRECISION, -- 产量 bad_qty DOUBLE PRECISION, -- 剔除产量 panzhi_val DOUBLE PRECISION, -- 盘纸消耗 run_time DOUBLE PRECISION, -- 运行时间 stop_time DOUBLE PRECISION, -- 停机时间 stop_times INTEGER, -- 停机次数 speed INTEGER -- 车速 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'makeup_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'makeup_time_data', 'key', number_partitions => 8 ); -- 创建主查询复合索引(时间+key) CREATE INDEX idx_makeup_time_data_time_key ON makeup_time_data (time DESC, key); -- 创建按设备查询复合索引(key+时间) CREATE INDEX idx_makeup_time_data_key_time ON makeup_time_data (key, time DESC); -- 创建网络状态索引 CREATE INDEX idx_makeup_online_key ON makeup_time_data (online, key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_makeup_time_data_shift ON makeup_time_data (shift); CREATE INDEX idx_makeup_time_data_equ_no ON makeup_time_data (equ_no); //发射机 -- 创建主表 CREATE TABLE trans_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 您的业务字段 online INTEGER, -- 网络状态 0异常,1正常 -- 管道滤棒计数(1-10号管道) p_qty1 DOUBLE PRECISION, -- 管道1滤棒计数 p_qty2 DOUBLE PRECISION, -- 管道2滤棒计数 p_qty3 DOUBLE PRECISION, -- 管道3滤棒计数 p_qty4 DOUBLE PRECISION, -- 管道4滤棒计数 p_qty5 DOUBLE PRECISION, -- 管道5滤棒计数 p_qty6 DOUBLE PRECISION, -- 管道6滤棒计数 p_qty7 DOUBLE PRECISION, -- 管道7滤棒计数 p_qty8 DOUBLE PRECISION, -- 管道8滤棒计数 p_qty9 DOUBLE PRECISION, -- 管道9滤棒计数 p_qty10 DOUBLE PRECISION, -- 管道10滤棒计数 -- 管道滤棒速度(1-10号管道) speed1 DOUBLE PRECISION, -- 管道1滤棒速度 speed2 DOUBLE PRECISION, -- 管道2滤棒速度 speed3 DOUBLE PRECISION, -- 管道3滤棒速度 speed4 DOUBLE PRECISION, -- 管道4滤棒速度 speed5 DOUBLE PRECISION, -- 管道5滤棒速度 speed6 DOUBLE PRECISION, -- 管道6滤棒速度 speed7 DOUBLE PRECISION, -- 管道7滤棒速度 speed8 DOUBLE PRECISION, -- 管道8滤棒速度 speed9 DOUBLE PRECISION, -- 管道9滤棒速度 speed10 DOUBLE PRECISION, -- 管道10滤棒速度 -- 卸盘机相关 xp_state INTEGER, -- 卸盘机状态 tray_qty1 DOUBLE PRECISION -- 卸盘机产量 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'trans_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'trans_time_data', 'key', number_partitions => 8 ); -- 创建主查询复合索引 CREATE INDEX idx_trans_time_data_time_key ON trans_time_data (time DESC, key); CREATE INDEX idx_trans_time_data_key_time ON trans_time_data (key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_trans_time_data_shift ON trans_time_data (shift); CREATE INDEX idx_trans_time_data_equ_no ON trans_time_data (equ_no); -- 创建网络状态索引 CREATE INDEX idx_trans_online_key ON trans_time_data (online, key, time DESC); -- 创建卸盘机状态索引 CREATE INDEX idx_trans_xp_state_key ON trans_time_data (xp_state, key, time DESC); //提升机 -- 创建主表 CREATE TABLE hoister_time_data ( -- 时序表必需的字段 time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 基础字段 online INTEGER, -- 网络状态 0异常,1正常 qty DOUBLE PRECISION, -- 产量(总产量?) -- 提升机状态(1-12号) t_state1 DOUBLE PRECISION, -- 1#提升机状态 t_state2 DOUBLE PRECISION, -- 2#提升机状态 t_state3 DOUBLE PRECISION, -- 3#提升机状态 t_state4 DOUBLE PRECISION, -- 4#提升机状态 t_state5 DOUBLE PRECISION, -- 5#提升机状态 t_state6 DOUBLE PRECISION, -- 6#提升机状态 t_state7 DOUBLE PRECISION, -- 7#提升机状态 t_state8 DOUBLE PRECISION, -- 8#提升机状态 t_state9 DOUBLE PRECISION, -- 9#提升机状态 t_state10 DOUBLE PRECISION, -- 10#提升机状态 t_state11 DOUBLE PRECISION, -- 11#提升机状态 t_state12 DOUBLE PRECISION, -- 12#提升机状态 -- 排包机状态(1-4号) p_state1 DOUBLE PRECISION, -- 1#排包机状态 p_state2 DOUBLE PRECISION, -- 2#排包机状态 p_state3 DOUBLE PRECISION, -- 3#排包机状态 p_state4 DOUBLE PRECISION, -- 4#排包机状态 -- 提升机产量(1-12号) t_qty1 DOUBLE PRECISION, -- 1#提升机产量 t_qty2 DOUBLE PRECISION, -- 2#提升机产量 t_qty3 DOUBLE PRECISION, -- 3#提升机产量 t_qty4 DOUBLE PRECISION, -- 4#提升机产量 t_qty5 DOUBLE PRECISION, -- 5#提升机产量 t_qty6 DOUBLE PRECISION, -- 6#提升机产量 t_qty7 DOUBLE PRECISION, -- 7#提升机产量 t_qty8 DOUBLE PRECISION, -- 8#提升机产量 t_qty9 DOUBLE PRECISION, -- 9#提升机产量 t_qty10 DOUBLE PRECISION, -- 10#提升机产量 t_qty11 DOUBLE PRECISION, -- 11#提升机产量 t_qty12 DOUBLE PRECISION, -- 12#提升机产量 -- 排包机产量(1-4号) p_qty1 DOUBLE PRECISION, -- 1#排包机产量 p_qty2 DOUBLE PRECISION, -- 2#排包机产量 p_qty3 DOUBLE PRECISION, -- 3#排包机产量 p_qty4 DOUBLE PRECISION -- 4#排包机产量 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'hoister_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'hoister_time_data', 'key', number_partitions => 8 ); -- 创建主查询复合索引 CREATE INDEX idx_hoister_time_data_time_key ON hoister_time_data (time DESC, key); CREATE INDEX idx_hoister_time_data_key_time ON hoister_time_data (key, time DESC); -- 创建网络状态索引 CREATE INDEX idx_hoister_online_key ON hoister_time_data (online, key, time DESC); -- 创建总产量索引 CREATE INDEX idx_hoister_qty_key ON hoister_time_data (qty, key, time DESC); -- 创建提升机状态通用索引(最常用的几个) CREATE INDEX idx_hoister_t_state1_key ON hoister_time_data (t_state1, key, time DESC); CREATE INDEX idx_hoister_t_state2_key ON hoister_time_data (t_state2, key, time DESC); CREATE INDEX idx_hoister_t_state3_key ON hoister_time_data (t_state3, key, time DESC); -- 创建排包机状态索引 CREATE INDEX idx_hoister_p_state1_key ON hoister_time_data (p_state1, key, time DESC); CREATE INDEX idx_hoister_p_state2_key ON hoister_time_data (p_state2, key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_hoister_time_data_shift ON hoister_time_data (shift); CREATE INDEX idx_hoister_time_data_equ_no ON hoister_time_data (equ_no); //喂丝机 -- 创建主表 CREATE TABLE feedmatch_time_data ( time TIMESTAMPTZ NOT NULL, key TEXT NOT NULL, shift INTEGER, -- 班次 (1位数字) equ_no INTEGER, -- 设备号 (3位数字) -- 数据更新时间(字符串格式) dac_up_time TEXT, -- 数据更新时间 格式:'2024-11-29 09:13:43' -- 喂丝机对应的储丝柜(1#-4#喂丝机,每个对应2个储丝柜)- 整型 fs11 INTEGER, -- 1#喂丝机对应的第一个储丝柜 fs12 INTEGER, -- 1#喂丝机对应的第二个储丝柜 fs21 INTEGER, -- 2#喂丝机对应的第一个储丝柜 fs22 INTEGER, -- 2#喂丝机对应的第二个储丝柜 fs31 INTEGER, -- 3#喂丝机对应的第一个储丝柜 fs32 INTEGER, -- 3#喂丝机对应的第二个储丝柜 fs41 INTEGER, -- 4#喂丝机对应的第一个储丝柜 fs42 INTEGER, -- 4#喂丝机对应的第二个储丝柜 -- 机组对应的喂丝机和管道(1#-12#机组)- 整型 pipe01 INTEGER, -- 1#机组对应的喂丝机和管道 pipe02 INTEGER, -- 2#机组对应的喂丝机和管道 pipe03 INTEGER, -- 3#机组对应的喂丝机和管道 pipe04 INTEGER, -- 4#机组对应的喂丝机和管道 pipe05 INTEGER, -- 5#机组对应的喂丝机和管道 pipe06 INTEGER, -- 6#机组对应的喂丝机和管道 pipe07 INTEGER, -- 7#机组对应的喂丝机和管道 pipe08 INTEGER, -- 8#机组对应的喂丝机和管道 pipe09 INTEGER, -- 9#机组对应的喂丝机和管道 pipe10 INTEGER, -- 10#机组对应的喂丝机和管道 pipe11 INTEGER, -- 11#机组对应的喂丝机和管道 pipe12 INTEGER, -- 12#机组对应的喂丝机和管道 -- 喂丝机状态 - 整型 wsj_state INTEGER -- 喂丝机状态 1-连接 0-断开 ); -- 将表转换为超表(按天分区) SELECT create_hypertable( 'feedmatch_time_data', 'time', chunk_time_interval => INTERVAL '1 day' ); -- 添加空间分区维度(按key分区,分成8个分区) SELECT add_dimension( 'feedmatch_time_data', 'key', number_partitions => 8 ); -- 创建主查询复合索引 CREATE INDEX idx_feedmatch_time_data_time_key ON feedmatch_time_data (time DESC, key); CREATE INDEX idx_feedmatch_time_data_key_time ON feedmatch_time_data (key, time DESC); -- 班次和设备号索引 CREATE INDEX idx_feedmatch_time_data_shift ON feedmatch_time_data (shift); CREATE INDEX idx_feedmatch_time_data_equ_no ON feedmatch_time_data (equ_no); //各表添加通用字段 ALTER TABLE public.trans_time_data ADD COLUMN IF NOT EXISTS create_dept integer, ADD COLUMN IF NOT EXISTS create_by bigint, ADD COLUMN IF NOT EXISTS create_time timestamp, ADD COLUMN IF NOT EXISTS update_by bigint, ADD COLUMN IF NOT EXISTS update_time timestamp, ADD COLUMN IF NOT EXISTS remark varchar(255); // 历史数据更新脚本(执行一次即可) -- 更新 roller_time_data UPDATE roller_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 packer_time_data UPDATE packer_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 box_time_data UPDATE box_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 makeup_time_data UPDATE makeup_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 trans_time_data UPDATE trans_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 hoister_time_data UPDATE hoister_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL; -- 更新 feedmatch_time_data UPDATE feedmatch_time_data SET shift = CAST(SUBSTRING(key FROM 1 FOR 1) AS INTEGER), equ_no = CAST(SUBSTRING(key FROM 2 FOR 3) AS INTEGER) WHERE shift IS NULL;