持续聚合
Flow 引擎按时间窗口维护总和、平均值、计数等聚合结果,新数据到达时更新 sink 表。查询直接读 sink 表,不必扫描 source 表。
下面三个例子覆盖了常见的用法:
- 实时分析:把高频事件流降采样到较低分辨率。例如把毫秒级的日志事件汇总成每分钟的请求数、平均响应时间和错误率。
- 实时监控:对数据流做聚合,并把聚合出的行本身作为告警,例如窗口内最高 温度超过阈值时才写出一行。
- 实时仪表盘:预先算好仪表盘要展示的计数,例如每分钟的请求数、平均响应时间和错误数。
实时分析示例
日志统计
这个例子是根据输入表中的数据计算一系列统计数据,包括一分钟时间窗口内的总日志数、最小大小、最大大小、平均大小以及大小大于 550 的数据包数。
首先,创建一个 source 表 ngx_access_log 和一个 sink 表 ngx_statistics,如下所示:
CREATE TABLE `ngx_access_log` (
`client` STRING NULL,
`ua_platform` STRING NULL,
`referer` STRING NULL,
`method` STRING NULL,
`endpoint` STRING NULL,
`trace_id` STRING NULL FULLTEXT INDEX,
`protocol` STRING NULL,
`status` SMALLINT UNSIGNED NULL,
`size` DOUBLE NULL,
`agent` STRING NULL,
`access_time` TIMESTAMP(3) NOT NULL,
TIME INDEX (`access_time`)
)
WITH(
append_mode = 'true'
);