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
);
相关推荐
巨斧空间掌门30 分钟前
JDK17 下载 windows Linux
linux·运维·服务器
江畔何人初1 小时前
kube-apiserver、kube-proxy、Calico 关系
运维·服务器·网络·云原生·kubernetes
一段佳话^cyx2 小时前
详解逻辑回归(Logistic Regression):原理、推导、实现与实战
大数据·算法·机器学习·逻辑回归
zhou lily2 小时前
SaaS模式下的企业服务创新与数字化转型:战略重构与价值落地
大数据
皮卡蛋炒饭.2 小时前
进程得控制
linux·运维·服务器
qq_452396232 小时前
【Python × AI】多智能体协作:从 AutoGPT 到 CrewAI 的组织进化论
大数据·人工智能·python·ai
weiwx832 小时前
Nginx location 和 proxy_pass 配置详解
服务器·网络·nginx
西门吹-禅3 小时前
【sap fiori cds up error】
java·服务器·sap cap cds
跨境卫士-小汪4 小时前
高风险订单识别不足如何设置拦截与二次核验
大数据·人工智能·产品运营·跨境电商·营销策略
贾斯汀玛尔斯5 小时前
kinbana中无法在discover中显示在ES中创建的索引--解决方案
大数据·elasticsearch·搜索引擎