特别注意:
postgres时区问题,安装后如果是UTC要改成 Asia/Shanghai(+8)
动态运行参数 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;