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
);
相关推荐
Databend20 小时前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
大大大大晴天21 小时前
Flink JDBC Connector 深度解析:从原理到最佳实践
flink
Databend1 天前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
你好潘先生1 天前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
阿里云大数据AI技术2 天前
StarRocks x Fluss x Paimon湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
大数据·人工智能
Databend2 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
程序员老赵2 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
喵个咪2 天前
Go Wind UBA 拆解系列 - 架构总览:三服务、数据流与契约优先
大数据·后端·go
喵个咪2 天前
Go Wind UBA 拆解系列 - 多租户与安全:两套隔离机制的边界
大数据·后端·go
喵个咪2 天前
Go Wind UBA 拆解系列 - OLAP 与 SQL 硬核:25 个分析模型怎么落地
大数据·后端·go