flink 基站与服务器长连接,每次连接和断开都会上报数据,统计过去一小时每个基站断开次数和时长

模拟生成数据

sql 复制代码
CREATE TABLE ods_station_log (
  base_station_id int,   -- 基站ID
  event_type      int,   -- 事件类型: connect/disconnect
  event_time      TIMESTAMP_LTZ(3), -- 事件时间
  WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND -- 允许5秒乱序
) WITH (
  'connector' = 'datagen',
  
  -- 基站ID生成规则(BS001 ~ BS100)
  'fields.base_station_id.kind' = 'random',
  'fields.base_station_id.min' = '1',
  'fields.base_station_id.max' = '2',
  
  -- 事件类型随机生成(50%概率为 connect/disconnect)
  'fields.event_type.kind' = 'random',
  'fields.event_type.min' = '0',
  'fields.event_type.max' = '1',
  
  -- 事件时间生成规则(模拟1小时数据,每秒10条)
  'fields.event_time.kind' = 'random',
  'fields.event_time.max-past' = '1000s',
  -- 控制数据生成速率
  'rows-per-second' = '1'
);

需求: 基站与服务器长连接,每次连接和断开都会上报数据,统计过去一小时每个基站断开次数和时长

思路:

sql 复制代码
CREATE TEMPORARY VIEW disconnect_records2 AS
SELECT
  base_station_id,
  connect_time,
  disconnect_time,
  TIMESTAMPDIFF(SECOND, connect_time, disconnect_time) AS duration
FROM ods_station_log
MATCH_RECOGNIZE (
  PARTITION BY base_station_id
  ORDER BY event_time
  MEASURES
    e_connect.event_time AS connect_time,
    e_disconnect.event_time AS disconnect_time
  ONE ROW PER MATCH
  AFTER MATCH SKIP PAST LAST ROW
  PATTERN (e_connect e_disconnect) 
  DEFINE
    e_connect AS e_connect.event_type = 1,
    e_disconnect AS e_disconnect.event_type = 0
);
相关推荐
小蜜蜂爱编程几秒前
ubuntu透网方案
运维·服务器·ubuntu
头发那是一根不剩了1 小时前
nginx:SSL_CTX_use_PrivateKey failed
运维·服务器
liupenglove2 小时前
自动驾驶数据仓库:时间片合并算法。
大数据·数据仓库·算法·elasticsearch·自动驾驶
景彡先生4 小时前
C++编译期计算:常量表达式(constexpr)全解析
服务器·c++
阿巴~阿巴~4 小时前
理解Linux文件系统:从物理存储到统一接口
linux·运维·服务器
tan77º4 小时前
【Linux网络编程】应用层自定义协议与序列化
linux·运维·服务器·网络·c++·tcp/ip
wanhengidc4 小时前
在徐州网络中服务器租用与托管的优势
运维·服务器·网络
全能搬运大师5 小时前
win10安装Elasticsearch
大数据·elasticsearch·搜索引擎
Guheyunyi5 小时前
电气安全监测系统:筑牢电气安全防线
大数据·运维·网络·人工智能·安全·架构
BigData共享6 小时前
StarRocks fragment的执行流程
大数据