flink滚动窗口代码

flink滚动窗口代码讲解

重点:

  你单独在kafka写入一批数据进行测试,它不会直接出结果,等你下批测试数据进来的时候他才会显示上一批数据的最终结果集
CREATE TABLE kafkaSource(
  username   string,
  click_url  string,
  ts  timestamp,
  WATERMARK FOR ts as withOffset(ts,1000)
  --ts必须是表中已定义的一列(当前仅支持为Timestamp类型),含义是基于该列生成 watermark,并且标识该列为 Event Time 列,可以在后续 query 中用来定义窗口。
  --1000 代表偏移量(数据可以延迟时间) 相当于是1s
) WITH (
    type='kafka',
    kafka.bootstrap.servers='ip地址:端口号',
    kafka.auto.offset.reset='latest',
    kafka.topic='cui_test',
    kafka.group.id='kafka_group',
    dataType='json',
    parallelism ='1'
);

CREATE TABLE cui_test(
  username string,
  start_time TIMESTAMP,
  end_time TIMESTAMP,
  clicks BIGINT
)WITH(
    type='mysql',
    url='jdbc:mysql://IP地址:端口号/库名?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true',
    userName='库用户名',
    password='库密码',
    tableName='cui_test',
    parallelism ='1'
 );
 
insert into cui_test
select
username,
TUMBLE_START(ROWTIME, INTERVAL '1' MINUTE) as start_time,  --窗口开始时间 定义eventtime 自动生成的
TUMBLE_END(ROWTIME, INTERVAL '1' MINUTE) as end_time,  --创建结束时间 定义eventtime 自动生成的
COUNT(click_url) as clicks
from  kafkaSource 
GROUP BY TUMBLE(ROWTIME, INTERVAL '1' MINUTE), username;

往kafka写入测试数据

{"username":"Tom","click_url":"www.baidu.com","ts":"2021-02-20 16:20:05"} 5条
{"username":"Jack","click_url":"www.baidu.com","ts":"2021-02-20 16:20:10"} 3条

最终库结果

名称     窗口开始时间          窗口结束时间        次数
Tom	    2021-02-20 16:20:00	2021-02-20 16:21:00	5
Jack	2021-02-20 16:20:00	2021-02-20 16:21:00	3

猜你喜欢

转载自blog.csdn.net/weixin_45780435/article/details/115377684