Flink SQL _ Table 介绍与实战 | 学习笔记(一)

简介: 快速学习 Flink SQL _ Table 介绍与实战

开发者学堂课程【开源 Flink 极客训练营Flink SQL _ Table 介绍与实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/760/detail/13341


Flink SQL _ Table 介绍与实战

 

内容介绍:

一、背景

二、SQL & Table API

三、DEMO

四、演练

 

一、背景

1.Flink强大的抽象能力

不同层次的抽象覆盖各类应用场景

Flink有强大的API抽象能力,Flink提供了三层API

从底向上分别是Process Function、DataStream API、SQL/Table API

图片18.png

最底层Process Function 提供了最细腻度的控制和语义,用户可以灵活控制时间、注册定时器、某个定时时间处理数据,时间可以说事件的时间或系统的时间

DataStream API,Flink 提供分装的基本的函数,如windows的方法等

val stats = stream

.keyBy( "sensor")

.timiewindow ( Time. seconds(5))

.sum((a, b) -> a.add(b))

可以做基本的操作

SQL/Table API层,Flink最高层次的API,通过SQL的语法,表述作业。

每一层都有不同的针对的用户群体,越低层次的灵活度越高,门槛越高,最高层次门槛高,灵活的差。

2.DataStream API很好用

(1)表达力很强的流处理API

Transform, aggregate, and join events- Java and Scala

用户可以使用上面定义好的函数,也可以自己灵活扩展DataStream API不支持的算子的实现,也可以灵活控制事件的监听

(2)时间的控制

Timestamps, Watermarks,Windows,Timers,Triggers,Allowed Lateness,...

指定事件的时间、指定 Watermarks策略,指定大数据的处理等,

十分灵活

(3)维护和更新应用状态

Keyed state, operator state, state backends,checkpointing, ...

3.但却不适用于所有人

(1)写一个分布式程序有时不那么容易

- Stream processing technology spreads rapidly

- New concepts (time, state, ..)

(2)需要一定的知识储备和技巧

- Continous applications have special requirements

- Programming experience (Java / Scala)

(3)用户希望专注于业务逻辑

希望提供一套简单易懂的API

4.Flink SQL/ Table API的优势

(1)易于理解

不同行业不同领域的人都熟悉SQL,学习门槛较低,近几年,SQL称为Hadoop生态圈或大数据处理生态圈标准的语言

(2)声明式

用户只需要表达“我想要什么”,不需要了解如何计算

(3)自动优化

有优化器,为SQL系统生产最优的执行计划,用户能够享受优化带来的性能提升

(4)API稳定

30多年的历史,较为稳定

(5)批流统一

Flink用标准的SQL扩展流处理,用SQL同时做到流处理与批处理,一些场景下,用批处理做全量,流处理做实时更新,用一份数据代码应用在批模式与流模式下,混合模式,用户只需要关心最核心的业务逻辑,维护一个SQL代码,维护一个Flink集群

 

二、SQL & Table API

1.Apache Flink's Relational APls

两种API,SQL API与Table API

(1)ANSI SQL

SELECT user,COUNT(ur1) AS cnt

FROM clicks

GROUP BY user

遵循ANSI SQL标准设计

(2)LINQ-style Table API

tableEnvironment

.scan("clicks")

.groupBy( ' user)

.select( ' user,'ur1.count as 'cnt)

Table API 类SQL编程式的API

统一的API处理batch & streaming数据

一个查询描述了相同结果

不管它的输入是静态的批数据还是流数据

总结,一份代码,一份结果

2.Flink SQL/Table查询解释

图片19.png

Flink提供了SQL与Table两种API,Table API提供Python语言、scholar语言、Java语言三种,SQL与Table API作业进入Flink后,首先被转化成统一的数据结构的表达形式Logical Plan,在转化过程中,会出现Catalog的事情,Catalog的作用提供一些元数据的信息,如表名、表名信息、涵盖的列以及列的类型、表的统计信息等,信息放入Logical Plan中,用于后续优化。Logical Plan是优化的路口,经过一系列的优化规则后,Flink的优化器会将初始的Logical Plan 优化成优化后的Physical Plan,Physical Plan最终通过Flink的机制将Physical Plan翻译成Transformations 的DNG、DNG图,Transformations是往下一层API,在Transformations有很多优化,Transformations转化成JobGraph,提交到Flink的集群做分布式执行,JobGraph在本地进行生成,JobGraph是用于提交的对象,提交到Flink的集群做分布式执行。

整个流程并没有为流处理或批处理一个特殊的单独的路径做处理,优化、构建的过程都是共享的,优化的规则、二进制的处理算子都是共享的

2.流和批的区别:

(1)假如“Clicks”是一个文件?

图片20.png

点击的文件,文件中有三个字段,user、点击的时间、点击的url

做用户的点击数,根据用户进行分组,用count(url)做点击次数的统计,选出user。在批处理文件的情况下,数据输入完成后,做统一的执行与输出。Mary点击两次,输出2,Bob与Liz点击一次,输出1,特点是输入数据是一次性读入的,输出也是一次性输出的,结果是一个确定性的结果。

SELECT

user,

COUNT(ur1) as cnt

FROM clicks

GROUP BY user

(2)假如“Clicks”是一个流?

图片21.png

数据的格式是相同的,数据是相同的,当进入一条Mary,输出Mary1,当Bob第一次进入,输出Bob1,当Mary第二次进入,查询count状态中之前的值,做增量的计算,Mary对于count状态的值是1,做加1的工作,Liz进入时,输出Liz1,特点是输入的数据是持续不断读入的,输出的数据是不断持续更新的

结果是一样的!

流式结果与批式结果是相同的

SELECT

user,

COUNT(ur1) as cnt

FROM clicks

GROUP BY user

3.Flink SQL/Table应用案例

(1)低延迟ETL处理

做数据的预处理、迁徙等

(2)数据管道,构建低延时实时数仓,实时数据同步

做实时数仓,流批一体的实时数仓;实时数据同步,从一个数据系统同步到另一个数据系统

(3)流式&批式的数据分析

-计算更新实时/离线数据并可视化

如,阿里双十一的大屏,实时消费各种数据流,做各种维度的统计分析

(4)模式识别

实时识别数据流中事件流,做相应的监控、报警服务

-网约车异常事件监测服务

4.Flink SQL/Table核心功能一览(v1.11)

(1)SQL DDL

通过语法注册一张表,DDL直接对接外部系统,DDL功能强弱直接决定Flink与外部系统的连通性,作为计算引擎,数据存储之间的连通性是十分重要的。

(2)完整的类型系统

Flink的一个亮点,Flink完整的类型系统依照标准的SQL设计的,完整的类型系统对SQL引擎是十分必要的。

(3)高效流式TopN

实时计算排行榜,双十一实时销量店铺。

(4)高效流式去重

流式高效去重,对数据中重复的数据进行过滤,否则得到的数据偏大,以较低的代价过滤重复数据。

(5)维表关联

实时关联My SQL等数据

(6)对接CDC

Flink SQL消费常见的CDC工具产生的数据,将数据解析成Flink认识的一些类型操作的数据,做一些聚合、关联等,同步到另一个数据库。

(7)丰富的内置函数

超过230多个内置函数。

(8)MiniBatch

(9)多种解热点手段

提供多种内置优化与调优的手段,聚合拆封等

(10)完整的批处理支持

功能较为完善

(11)Python Table API

(12)Hive集成

Hive是Hadoop生态圈中不容忽视的力量,Flink完整打通与Hive之间的访问,Flink可以直接存在Hive中已有的数据,可以将Flink表的信息存储到Hive中,供后续的访问;Hive实时数仓的解决方案,支持一些功能与数据结构,改善用户体验,有Hive数仓的用户,达到流批一体Hive数仓的目标;Flink SQL中兼容Hive语法,用户直接将Hive的脚本放入Flink中执行。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
845 43
|
4月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
308 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
3月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
9月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
3月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
5月前
|
SQL 消息中间件 Kafka
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是 Apache Flink 提供的 SQL 引擎,支持流批一体处理,统一操作流数据与批数据,具备高性能、低延迟、丰富数据源支持及标准 SQL 兼容性,适用于实时与离线数据分析。
917 1
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
431 15
|
11月前
|
SQL 大数据 数据处理
Flink SQL 详解:流批一体处理的强大工具
Flink SQL 是为应对传统数据处理框架中流批分离的问题而诞生的,它融合了SQL的简洁性和Flink的强大流批处理能力,降低了大数据处理门槛。其核心工作原理包括生成逻辑执行计划、查询优化和构建算子树,确保高效执行。Flink SQL 支持过滤、投影、聚合、连接和窗口等常用算子,实现了流批一体处理,极大提高了开发效率和代码复用性。通过统一的API和语法,Flink SQL 能够灵活应对实时和离线数据分析场景,为企业提供强大的数据处理能力。
1997 27
|
SQL 存储 缓存
Flink SQL Deduplication 去重以及如何获取最新状态操作
Flink SQL Deduplication 是一种高效的数据去重功能,支持多种数据类型和灵活的配置选项。它通过哈希表、时间窗口和状态管理等技术实现去重,适用于流处理和批处理场景。本文介绍了其特性、原理、实际案例及源码分析,帮助读者更好地理解和应用这一功能。
894 14
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
1095 3