JAVA实现Flink Table 基于事件时间的滑动窗口

JAVA实现Flink Table基于事件时间的滑动窗口代码样例

package org.fenghua.example.table.windos;

import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.streaming.api.TimeCharacteristic;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.TableEnvironment;
import org.apache.flink.table.api.java.Slide;
import org.apache.flink.table.api.java.StreamTableEnvironment;
import org.apache.flink.table.descriptors.Json;
import org.apache.flink.table.descriptors.Kafka;
import org.apache.flink.table.descriptors.Rowtime;
import org.apache.flink.table.descriptors.Schema;
import org.apache.flink.types.Row;

/**
 * 滑动窗口
 * {"id":2,"product":"test","amount":66,"createTime":"1637215294000"}
 *
 * @author: fenghua
 * @date: 2021/11/17
 */
public class KafkaSlidingEventTimeWindos {
    private final static String SOURCE_TOPIC = "topic3";
    private final static String ZOOKEEPER_CONNECT = "127.0.0.1:2181";
    private final static String METADATA_BROKER_LIST = "127.0.0.1:9092";

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        StreamTableEnvironment tEnv = TableEnvironment.getTableEnvironment(env);
        tEnv.connect(
                new Kafka()
                        .version("0.10")
                        .topic(SOURCE_TOPIC)
                        .startFromLatest()
                        .property("zookeeper.connect", ZOOKEEPER_CONNECT)
                        .property("bootstrap.servers", METADATA_BROKER_LIST)
        )
                .withFormat(
                        new Json()
                                .schema(
                                        org.apache.flink.table.api.Types.ROW(
                                                new String[]{"id", "product", "amount","createTime"},
                                                new TypeInformation[]{
                                                        Types.LONG,
                                                        Types.STRING,
                                                        Types.INT,
                                                        Types.SQL_TIMESTAMP,
                                                }))
                                .failOnMissingField(true)
                )
                .withSchema(
                        new Schema()
                                .field("id", Types.LONG)
                                .field("product", Types.STRING)
                                .field("amount", Types.INT)
                                .field("rowTime", Types.SQL_TIMESTAMP)
                                .rowtime(new Rowtime()
                                        .timestampsFromField("createTime")
                                        .watermarksPeriodicBounded(1000))
                )
                .inAppendMode()
                .registerTableSource("sourceTable");

        Table table1 = tEnv.sqlQuery("select id, rowTime from sourceTable");
        Table table2 = table1
                .window(Slide.over("20.second").every("10.second").on("rowTime").as("w"))
                .groupBy("id,w")
                .select("id,id.count");
        tEnv.toRetractStream(table2, Row.class).print();
        env.execute(" test ");

    }

}

代码仓库https://gitee.com/xuguoxi/FlinkLearn/blob/master/src/main/java/org/fenghua/example/table/windos/KafkaSlidingEventTimeWindos.javaicon-default.png?t=LA92https://gitee.com/xuguoxi/FlinkLearn/blob/master/src/main/java/org/fenghua/example/table/windos/KafkaSlidingEventTimeWindos.java仓库里面有其他样例代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走到无路可退

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值