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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 快速学习 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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-1
【4月更文挑战第4天】SQL更新语句执行涉及查询和日志模块,主要为`redo log`和`binlog`。`redo log`先写日志再写磁盘,保证`crash-safe`;`binlog`记录逻辑日志,支持所有引擎,且追加写入。执行过程分为执行器查找数据、更新内存和`redo log`(prepare状态)、写入`binlog`、提交事务(`redo log`转commit)。两阶段提交确保日志逻辑一致,支持数据库恢复至任意时间点。
22 0
|
1天前
|
SQL 数据处理 API
10分钟了解Flink SQL使用
Flink 是一个流处理和批处理统一的大数据框架,专门为高吞吐量和低延迟而设计。开发者可以使用SQL进行流批统一处理,大大简化了数据处理的复杂性。本文将介绍Flink SQL的基本原理、使用方法、流批统一,并通过几个例子进行实践。
10分钟了解Flink SQL使用
|
3天前
|
SQL 数据库
数据库SQL语言实战(六)
本次实战的重点就在于对表格本身的一些处理,包括复制表格、修改表格结构、修改表格数据
|
3天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(五)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
|
3天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同
数据库SQL语言实战(四)(数据库系统概念第三章练习题)
|
3天前
|
SQL Oracle 关系型数据库
数据库SQL语言实战(三)
本篇文章重点在于SQL中的各种删除操作
|
24天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
28天前
|
SQL 数据库
数据库SQL语言实战(一)
数据库SQL语言实战(一)