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
);
相关推荐
小周不摆烂24 分钟前
邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织
服务器
chat2tomorrow1 小时前
如何使用 QuickAPI 推动汽车行业数据分享:数据仓库场景下的实践
大数据·数据仓库·hadoop·bi·sql2api·quickapi
ARM2NCWU1 小时前
如何选择 边缘计算服务器
服务器·人工智能·边缘计算
拿了个橘子跑了(嘻嘻)1 小时前
Java基础学完,继续深耕(0505)Linux 常用命令
linux·服务器
斯普信云原生组1 小时前
Elasticsearch知识汇总之ElasticSearch配置文件说明
大数据·elasticsearch·jenkins
愚润求学1 小时前
【Linux】环境变量
linux·运维·服务器·开发语言·笔记
广龙宇2 小时前
物理服务器紧急救援:CentOS系统密码重置全流程实战指南
运维·服务器·centos
6.942 小时前
Spark,HDFS客户端操作
大数据·hdfs·spark
愚润求学2 小时前
【Linux】进程地址空间
linux·运维·服务器·c++·笔记