业务需要按每分钟统计不同交易状态的交易数,接了业务mysql库binlog到flink计算。这是一个retract回撤流。是不能够直接使用Tumble window计算的。 1. 那么是不是只能用全量窗口的方式实现?即group by交易时间落到其时长为一分钟的窗口,再配合state TTL来过期不需要的状态? 2. 这样一来的话每来一笔交易都会更新状态,如果直接输出到下游mysql保存的话会对mysql造成很大写压力,那么是不是可以再接一个Tumble window获取每个指标的最新统计值输出? 3. 另外我在想是不是可以将retract流转变成append流,再在上面使用Tumble window计算?例如: 统计10秒种内各种color个数 [id, color, time]
+I (2, red, 00:05) -U (2, red, 00:05)) +U (2, green, 00:07)) -D (2, green, 00:09)) select window_start, window_end, color, count(*) from tbl, LATERAL TABLE(WINDOW_IN_SECONDS(ts, 10)) AS T(window_start, window_end) group by color; 其中WINDOW_IN_SECONDS是一个UDTF 变成 [id, color, time, flag] +I (2, red, 1, 00:05, 1) +I (2, red, 1, 00:05, -1) +I (2, green, 1, 00:07, 1) +I (2, green, 1, 00:09, -1) SELECT window_start, window_end, color, sum(flag) FROM TABLE(TUMBLE(TABLE tbl, DESCRIPTOR(ts), INTERVAL '10' SECONDS)) GROUP BY window_start, window_end, color;
