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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
3月前
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
206 15
|
9天前
|
SQL 存储 缓存
Flink SQL Deduplication 去重以及如何获取最新状态操作
Flink SQL Deduplication 是一种高效的数据去重功能,支持多种数据类型和灵活的配置选项。它通过哈希表、时间窗口和状态管理等技术实现去重,适用于流处理和批处理场景。本文介绍了其特性、原理、实际案例及源码分析,帮助读者更好地理解和应用这一功能。
74 14
|
1月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
63 3
|
1月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
52 0
|
2月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
2月前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
60 0
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
2月前
|
SQL 监控 关系型数据库
SQL语句性能分析:实战技巧与详细方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
2月前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作
|
2月前
|
SQL 存储 Java
sql注入原理与实战(二)数据库原理
sql注入原理与实战(二)数据库原理