Flink 流转表,表转流,watermark设置

Flink SQL实战:用SQL玩转实时流数据处理 随着实时数据处理需求的爆发式增长,如何用简洁高效的方式处理流数据成为关键。Flink SQL作为Apache Flink的核心组件,提供了基于SQL的声明式编程接口,让熟悉SQL的开发者能够快速上手实时流处理。本文将深入解析Flink SQL的核心概念、技术原理,并通过实战案例演示如何用SQL实现复杂流处理逻辑,涵盖数据清洗、聚合统计、多流关联、事件时间处理等核心场景。 阅读详情

流转表

首先创建一个流


@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Nan {
    private String xing;
    private String name;
    private Long ts;
}


StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
StreamTableEnvironment tenv = StreamTableEnvironment.create(env);

DataStreamSource<String> sourceNan = env.socketTextStream("hdp01", 1111);
DataStreamSource<String> sourceNv = env.socketTextStream("hdp01", 2222);

System.setProperty("java.net.preferIPv4Stack", "true");

SingleOutputStreamOperator<Nan> beanNan = sourceNan.map(new MapFunction<String, Nan>() {
    @Override
    public Nan map(String s) throws Exception {
        try {
            String[] split = s.split(",");
            return new Nan(split[0].substring(0, 1), split[1], Long.parseLong(split[2]));
        } catch (Exception e) {
            return null;
        }
    }
}).filter(Objects::nonNull).assignTimestampsAndWatermarks(
        WatermarkStrategy.<Nan>forMonotonousTimestamps().withTimestampAssigner(new SerializableTimestampAssigner<Nan>() {
    @Override
    public long extractTimestamp(Nan nan, long l) {
        return nan.getTs();
    }
})).returns(TypeInformation.of(Nan.class));

创建watermark

流转表的时候有一个点要注意,watermark必须要重新指定,否则会丢失,常用的方式如下
创建watermark,有两步,
第一步:必须要依据一个字段来创建watermark,这个字段必须是timestamp_ltz(3)的类型。
第二步:根据时间戳字段生成watermark
时间戳字段有两种获取方式
1、根据一个bigint字段进行转换
2、在流转表,且流上设置了watermark的情况下,根据内置属性rowtime创建,这个rowtime是流转表时暴露出来的事件时间
watermark也有两种获取方式
1、根据时间戳字段重新创建watermark
2、在流转表,且流上设置了watermark的情况下,沿用流上的watermark

下面是两种场景,只要记住第一种就行了,其实第二种没什么用。

1、 根据一个bigint字段进行创建时间戳字段,然后重新创建watermark

tenv.createTemporaryView("nan", beanNan, Schema.newBuilder()
        .column("xing", DataTypes.STRING())
        .column("name", DataTypes.STRING())
        .column("ts", DataTypes.BIGINT())
        .columnByExpression("rt", "to_timestamp_ltz(ts,3)") // 根据一个bigint字段进行转换
        .watermark("rt", "rt - interval '1' second ") // 重新创建watermark
        .build());

2、根据内置属性rowtime创建时间戳字段,然后沿用流上的watermark

tenv.createTemporaryView("nan1", beanNan, Schema.newBuilder()
        .column("xing", DataTypes.STRING())
        .column("name", DataTypes.STRING())
        .column("ts", DataTypes.BIGINT())
        .columnByMetadata("rt", DataTypes.TIMESTAMP_LTZ(3),"rowtime") // 根据内置属性rowtime创建
        .watermark("rt", "source_watermark()") // 沿用流的watermark “source_watermark 等于 rt - interval '1' second”
        .build());
TableResult tableResult = tenv.executeSql("select *,current_watermark(rt) from nan");
tableResult.print();

表转流

首先创建一个表

 String source = "CREATE TABLE person (  " +
         "  xing STRING,  " +
         "  name STRING,  " +
         "  ts BIGINT,  " +
         "  rt as to_timestamp_ltz(ts,3),  " +
         "  watermark for rt as rt - interval '1' second  " +
         ") WITH (  " +
         " 'connector' = 'kafka',  " +
         " 'topic' = 'flink_topic',  " +
         " 'properties.bootstrap.servers' = '172.16.10.139:9092',  " +
         " 'properties.group.id' = 'testGroup',  " +
         " 'scan.startup.mode' = 'latest-offset', " +
         " 'format' = 'json'  " +
         ")";
 tenv.executeSql(source);

创建watermark

表转流,可以沿用表上的watermark,不需要额外声明

DataStream<Row> dataStream = tenv.toDataStream(table);

dataStream.process(new ProcessFunction<Row, Object>() {
    @Override
    public void processElement(Row value, ProcessFunction<Row, Object>.Context ctx, Collector<Object> out) throws Exception {
        System.out.println(value+" watermark=>"+ctx.timerService().currentWatermark());
    }
});
env.execute();
flink重温笔记(十五): flinkSQL 顶层 API ——实时数据流转化为SQL表的操作 今天是学习 flink 的第 15 天啦!学习了 flinkSQL 基础入门,主要是解决大数据领域数据处理采用表的方式,而不是写复杂代码逻辑,学会了如何初始化环境,鹅湖将流数据转化为表数据,以及如何查询表数据,结合自己实验猜想和代码实践,总结了很多自己的理解和想法,希望和大家多多交流!Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力! 阅读详情

相关推荐

flink1.18.0 流转表 表转流 jdk17 attachAsDataStream

流表互转 而且流sink 表sink同时存在且都可以输出.

yy的博客 633

Flink系列Table API和SQL之:表和流的转换

Flink系列Table API和SQL之:表和流的转换

zhengzaifeidelushang的博客 3601

10、Flink 动态表之表到流的转换详解

Flink 动态表之表到流的转换详解

猫猫爱吃小鱼粮 800

Flink流和表的转换

Flink流和表的转换

weixin_45538732的博客 1284

Flink实时数仓同步:流水表实战详解

在大数据领域,初始阶段业务数据通常被存储于关系型数据库,如MySQL。然而,为满足日常分析和报表等需求,大数据平台采用多种同步方式,以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓库等,选择取决于业务需求和数据特性。 一项常见需求是,大数据分析平台需要能够检索某张业务表的变更记录,并以每天为单位统计每条数据的变更频率。

探索大数据世界 - 深入解析数据存储、分布式计算与人工智能 2943

空0009

9。

Direction_Wind的博客 2609

FlinkSQL系列03-表定义

表名 (catalog_name.database_name.object_name)

边看边学 1777

PostgreSQL+PostGIS空间数据入库实战:从矢量栅格到GeoServer发布全流程

本文详细介绍了将矢量与栅格空间数据导入PostgreSQL并利用PostGIS扩展进行管理的完整流程。内容涵盖环境搭建、使用shp2pgsql和raster2pgsql工具进行数据入库、基础空间查询验证,以及最终通过GeoServer发布为地图服务的实战步骤,为构建空间数据平台提供清晰指引。

weixin_29268267的博客 289

FlinkSQL

flink-sql-doit deep as sea

wqy19941008的博客 1017

Python结合海康威视工业相机SDK实现高效图像采集与处理

本文详细介绍了如何使用Python结合海康威视工业相机SDK实现高效的图像采集与处理。内容涵盖从环境搭建、SDK核心模块理解,到完整的图像采集流程拆解,包括设备枚举、参数设置、主动取流以及关键的像素格式转换。同时,文章深入探讨了触发模式、参数控制等高级应用,并提供了性能优化建议和可复用的相机操作类封装,帮助开发者快速构建稳定的机器视觉应用。

weixin_29043895的博客 350

项目过程记录:ADS-B信号接收并显示(Ubuntu20.04+ANTSDR E310V2)

最近被安排做一个ADS-B信号接收的项目,拿到软件无线电模块(ANTSDR E310V2)后安装环境和软件真的太折磨了。。在此记录以下我走过的弯路,大家可以参考一下。

weixin_43627638的博客 5018

Flink系列Table API和SQL之:动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流(Upsert)

Flink系列Table API和SQL之:动态表、持续查询、将流转换成动态表、更新查询、追加查询、将动态表转换为流、更新插入流(Upsert)

zhengzaifeidelushang的博客 3347

1020空心杯电机驱动设计与ESP32实战

空心杯电机是一种高动态响应的直流微特电机,其驱动本质是解决电感负载下的大di/dt启动、反电动势耦合与电流纹波抑制问题。核心原理在于建立包含内阻、电感和反电动势的等效电路模型,并据此匹配开关器件、PWM参数与采样闭环。技术价值体现在小体积下实现毫秒级响应、低噪声(>30kHz)、高精度电流保护(±50mA)及热鲁棒性。典型应用于微型航模、手持云台与精密执行器等对功率密度和动态性能敏感的嵌入式系统。本文以1020规格空心杯电机为对象,基于ESP32平台完成从MOSFET选型、32kHz硬件PWM生成到INA2

weixin_42298164的博客 589

Flink - Table API 之流与表转换

Flink - Table API 数据转换 1.DataStream或DataSet 转换为Table 目前有两种方式将DataStream或DataSet 转换为Table 一种是通过注册Table的方式,将DataSet或DataStream数据集注册成CataLog中的表,然后可以直接使用Flink SQL操作注册好的Table,这种方式需要指定表名和包含的字段名称,Flink会自动推断出Table中的字段类型 一种是转换的方式,将DataSet或DataStream数据集转换成Table结构,然后

启迪思维,精进技术 2359

Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱

内存占用 | 512MB+ | **<10MB** | 50倍节省 || 启动时间 | 15-45秒 | **0.1-0.5秒** | 100倍加速 || 磁盘空间 | GB级 | **MB级** | 显著减少 || 系统调用性能 | 有损耗 | **原生速度** | 零损耗 |

Loving_enjoy的博客 398

Coze智能体开发:扣子空间制作PPT功能

扣子空间内置了丰富的场景模板,涵盖人文历史、学术分享、研究报告、数据分析等场景,可以满足不同用户的需求。 你只需输入与制作 PPT 相关的提示词,Agent 就能基于这些提示词展示思考的过程,并自动生成完整的 PPT。

王国平的博客 2054

Flink TableAPI和SQL(七)流转成动态表做动态查询

文章目录将流转换成动态表用 SQL 持续查询更新(Update)查询追加(Append)查询查询限制 将流转换成动态表 如果把流看作一张表,那么流中每个数据的到来,都应该看作是对表的一次插入(Insert)操作,会在表的末尾添加一行数据。因为流是连续不断的,而且之前的输出结果无法改变、只能在后面追加;所以我们其实是通过一个只有插入操作(insert-only)的更新日志(changelog)流,来构建一个表。 当用户点击事件到来时,就对应着动态表中的一次插入(Insert)操作,每条数据就是表中的一行;随着

weixin_45417821的博客 1079

AI算力网络与通信领域QoS保障的测试方法

在当今数字化时代,AI技术蓬勃发展,AI算力网络应运而生。它将分布在不同地理位置的算力资源进行整合,以高效地支持各种AI应用,如深度学习训练、智能图像识别等。而通信领域则是信息传输的基石,确保数据能够准确、快速地在不同节点之间传递。QoS保障在通信领域至关重要,它可以确保不同类型的业务(如语音通话、视频会议、在线游戏等)获得与其需求相匹配的服务质量。在AI算力网络中,QoS保障同样不可或缺,因为AI任务对网络的带宽、延迟、可靠性等指标有严格要求。

AI算力网络与通信的博客 529

flinkSql 将流和表的互相转换

表和流的相互转换

weixin_52642840的博客 1040

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Flink的动态表转流(toAppendStream和toRetractStream)

前言 在FlinkSQL创建表后,将动态表转换为数据流的时候,我们可以选择两种方式:toAppendStream和toRetractStream。 官网对此也有解释,编者在此给你找出来了:Flink官网动态表(表转流)说明部分,此处应有掌声。 表转流的几种多态函数 此处我们以toAppendStream为例: 源码接口代码 <T> DataStream<T> toAppendStream(Table table, TypeInformation<T> typeInfo)

长臂人猿的博客 7172

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

27.flink table api 和DataStream Api 互相转换

核心的英文并未删除,方便读者甄别我的理解和翻译。DataStream 中的水位线,如果DataStream 中的水位线没读懂,建议不要往下看了,以防走火入魔。

笔生花的博客 2774

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Flink第八章:FlinkSQL

这次博客我们记录以下FlinkSQL的学习内容FlinkSQL的内容就记录到这里.

weixin_50835854的博客 1250

Flink Table/Sql 流表转换

表到流的转换 动态表可以像普通数据表一样通过insert, update, delete来不断进行修改。 它可能是只有一行, 不断更新表,也可能是一个insert-only的表, 没有update和delete修改, 或者介于两者之间的其他表。 在镜动态表转换为流或将其写入外部系统时,需要将这些更改进行编码。 Flink的Table APIhe sql支持 三种方式来编码一个动态表的变化: Append-onlay流: 仅通过insert 操作修改的动态表可以通过输出插入的行转换为流...

bwddd的博客 2705

【SQL篇】一、Flink动态表与流的关系以及DDL语法

和MySQL等关系型表不同的是,无限流下,会有源源不断的数据过来进入表中,即动态表,来一条数据,往表中插入一条数据。修改查询SQL,使用TUMBLE加一个开窗,每个窗口触发时,输出结果,此时对结果表就只有insert追加数据,没有update,即追加查询。此时,结果表(动态),可能是简单的insert,如Bob这条数据,也可能是对旧数据的更新update,如Alice,这就是。动态表仅仅通过insert来修改,转为流时,对应一个仅追加的流,流中的每条数据,就是动态表的每行数据。

llg___的博客 1322

flink流转换成表的方法

在Apache Flink中,将数据流(DataStream)转换为表(Table)主要通过Table API实现。

2301_80954266的博客 317
上一篇: flink任务提交、内存、并行度设置
下一篇: 主机无法访问wsl内部
JNWsong
博客等级 码龄9年 287粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值