大数据Flink(一百一十五):Flink SQL的基本概念

news2024/11/15 3:40:48

文章目录

Flink SQL的基本概念

一、​​​​​​​SQL 中表的概念

二、​​​​​​​​​​​​​​SQL 临时表、永久表

三、​​​​​​​​​​​​​​SQL表类型的定义

四、​​​​​​​​​​​​​​常见的连接器

五、​​​​​​SQL数据视图

1、​​​​​​语法

2、​​​​​​​​​​​​​​示例


Flink SQL的基本概念

一、​​​​​​​​​​​​​​SQL 中表的概念

一个表的全名(标识)会由三个部分组成:Catalog 名称.数据库名称.表名称

如果 Catalog 名称或者数据库名称没有指明,就会使用当前默认值 default

举个例子,下面这个 SQL 创建的 Table 的全名为 default.default.table1

CREATE TABLE table1 ... WITH ( 'connector' = ... );

下面这个 SQL 创建的 Table 的全名为 default.mydatabase.table1

CREATE TABLE mydatabase.table1 ... WITH ( 'connector' = ... );

Flink中表指的是外部表 TABLE:描述的是外部数据,例如文件(HDFS)、消息队列(Kafka)等。依然拿离线 Hive SQL 举个例子,离线中一个表指的是 Hive 表,也就是所说的外部数据。

注意:这里有不同的地方就是,离线 Hive MetaStore 中不会有 Catalog 这个概念,其标识是数据库.数据表。

另外,在阿里云Flink全托管中,由于内置的vvp catalog是默认的catalog,所以创建表时,如果没有指定catalog,默认使用vvp catalog,可实现元数据持久化。

进入阿里云Flink开发平台,点击SQL开发,在快速入门文件夹下新建文件夹:SQL基础。

在此文件夹下,新建空白的流作业草稿test,引擎版本选择vvr-6.0.7-flink-1.15。

输入下面SQL代码,选中代码后点击运行。

CREATE TABLE table1(
    id     INT
    ,score INT
)WITH (
    'connector' = 'datagen'
    ,'fields.id.kind' = 'sequence'
    ,'fields.id.start' = '1'
    ,'fields.id.end' = '5'
    ,'fields.score.kind' = 'random'
    ,'fields.score.min' = '70'
    ,'fields.score.max' = '100'
);

创建后,点击元数据,可以在vvp下看到table1表,全称即vvp.default.table1

二、​​​​​​​​​​​​​​SQL 临时表、永久表

表可以是临时的,并与单个 Flink session(可以理解为 Flink 任务运行一次就是一个 session)的生命周期绑定。

表也可以是永久的,并且对多个 Flink session 都生效。

  • 临时表:通常保存于内存中并且仅在创建它们的 Flink session(可以理解为一次 Flink 任务的运行)持续期间存在。这些表对于其它 session(即其他 Flink 任务或非此次运行的 Flink 任务)是不可见的。因为这个表的元数据没有被持久化。如下案例:

在test作业中运行以下代码进行建表

CREATE TEMPORARY TABLE table2(
    id     INT
    ,score INT
)WITH (
    'connector' = 'datagen'
    ,'fields.id.kind' = 'sequence'
    ,'fields.id.start' = '1'
    ,'fields.id.end' = '5'
    ,'fields.score.kind' = 'random'
    ,'fields.score.min' = '70'
    ,'fields.score.max' = '100'
);

建表后,vvp中并没有看到它的表信息。

查询表数据,选中下面代码,点击调试,选择之前创建的session

select * from table2;

出现报错,原因是表不存在。(验证了临时表对于其它任务是不可见的

同时选中建表语句和查询语句,点击调试。

结果如下 

可以查到表的数据(验证了临时表对于本次任务是可见的)。

  • 永久表:需要外部 Catalog(阿里云Flink默认内置了vvp catalog)来持久化表的元数据。一旦永久表被创建,它将对任何连接到这个 Catalog 的 Flink session 可见且持续存在,直至从 Catalog 中被明确删除。如下案例:

在test作业中运行以下代码进行建表

CREATE TABLE table2(
    id     INT
    ,score INT
)WITH (
    'connector' = 'datagen'
    ,'fields.id.kind' = 'sequence'
    ,'fields.id.start' = '6'
    ,'fields.id.end' = '10'
    ,'fields.score.kind' = 'random'
    ,'fields.score.min' = '70'
    ,'fields.score.max' = '100'
);

在元数据中可以看到表信息。

查询表table2,点击调试,如下:

可以查到结果(验证了它对任何连接到这个 Catalog 的 任务可见且持续存在

  • 如果临时表和永久表使用了相同的名称(Catalog名.数据库名.表名)。那么在这个 Flink session 中,你的任务访问到这个表时,访问到的永远是临时表(即相同名称的表,临时表会屏蔽永久表)。可以自行验证。

 

三、​​​​​​​​​​​​​​SQL表类型的定义

阿里云实时计算Flink版通过Flink SQL定义表对上下游存储进行映射或者使用Datastream API进行连接来实现读写。支持以下几种Flink SQL表类型的定义:

  • 源表(Source Table)
    • Flink作业的数据输入表,是计算的驱动来源。
    • 不能作为维表,必须作为驱动表来推进后续计算。产生的记录决定了计算链的触发。
    • 通常是需要进行转换计算的大规模业务数据,量级可以达到千万级甚至亿级别。
    • 以流式数据的形式输入,表示连续不断的新数据,可以来自消息队列、数据库变更日志等。
    • 包含需要Join和关联的关键字段,如用户ID、订单ID等业务主键。
  • 维表(Dimension Table)
    • 辅助表,用于丰富和扩展源表的数据。
    • 不能作为主驱动表,只能辅助补充源表。维表本身不驱动计算。
    • 数据规模通常较小,可以是静态表也可以是低吞吐的流表,数据量级可能在GB到TB级别。
    • 提供对业务数据的额外补充信息,如用户姓名、产品详情、区域信息等。
    • 通过与源表进行Join连接,可以丰富源表的信息,形成更加详细的宽表。
  • 结果表(Result Table)
    • Flink作业输出的结果数据表。
    • 存储着经过计算转换后的最终结果数据,如聚合结果、过滤后的数据等。
    • 可以输出到数据库、消息队列、文件等外部系统,用于后续的分析。
    • 是整个作业处理链的最终产出和输出,存储了计算的输出。
  • 例如,有如下源表和维表:
    • 源表:订单数据表,包含用户ID、订单ID、订单金额等信息。
    • 维表:用户信息表,包含用户ID、用户名、地址等信息。

作业首先从订单数据源表读取实时订单数据,将订单数据流与用户信息静态维表进行Join,然后按地区聚合统计订单总额,最后将统计结果写入结果表。

在这个作业中,订单表作为驱动源表输入,用户信息表作为静态维表,统计结果表作为作业最终输出。订单表不能作为维表,必须作为驱动表输入数据;而用户信息表不能作为驱动表,只能作为辅助维表补充订单数据。

 

四、​​​​​​​​​​​​​​常见的连接器

  • 我们在生产和测试中经常用到的连接器有:kafka、mysql、hologres、upsert-kafka、print、blackhole、jdbc、starrocks、paimon等。详细介绍可以点击下方表格中连接器的超链接进入阿里云官网查看。
  • 阿里云Flink全托管支持的连接器以及特性如下

 

连接器

支持类型

运行模式

API类型

是否支持更新或删除结果表数据

源表

维表

结果表

消息队列Kafka

×

流模式

SQL和DataStream

不支持更新和删除结果表数据,只支持插入数据。

实时数仓Hologres

流模式和批模式

SQL和DataStream

日志服务SLS

×

流模式

SQL

不支持更新和删除结果表数据,只支持插入数据。

MySQL

流模式

SQL和DataStream

云数据库RDS MySQL版

×

流模式和批模式

SQL

大数据计算服务MaxCompute

流模式和批模式

SQL和DataStream

不支持更新和删除结果表数据,只支持插入数据。

数据总线DataHub

×

流模式和批模式

SQL和DataStream

不支持更新和删除结果表数据,只支持插入数据。

云数据库Redis

×

流模式

SQL

Upsert Kafka

×

流模式和批模式

SQL

Elasticsearch

流模式和批模式

SQL和DataStream

云原生数据仓库 AnalyticDB MySQL版 3.0

×

流模式和批模式

SQL

ClickHouse

×

×

流模式和批模式

SQL

Hudi

×

流模式和批模式

SQL和DataStream

Print

×

×

流模式和批模式

SQL

Blackhole

×

×

流模式和批模式

SQL

云数据库HBase

×

流模式

SQL

Datagen

×

×

流模式和批模式

SQL

不涉及

消息队列RocketMQ

×

流模式

SQL和DataStream

不支持更新和删除结果表数据,只支持插入数据。

表格存储Tablestore(OTS)

流模式

SQL

JDBC

流模式和批模式

SQL

云数据库MongoDB

×

×

流模式

SQL

StarRocks

×

流模式和批模式

SQL和DataStream

Postgres CDC(公测中)

×

×

流模式

SQL

不涉及

云原生数据仓库AnalyticDB PostgreSQL版

×

流模式和批模式

SQL

云原生多模数据库Lindorm

×

流模式

SQL

对象存储OSS

×

流模式和批模式

SQL和DataStream

不支持更新和删除结果表数据,只支持插入数据。

模拟数据生成Faker

×

流模式和批模式

SQL

不涉及

Iceberg

×

流模式和批模式

SQL

InfluxDB

×

×

流模式

SQL

流式数据湖仓Paimon

流模式和批模式

SQL

Hudi

×

流模式和批模式

SQL和DataStream

云原生内存数据库Tair

×

×

流模式

SQL

MongoDB CDC(公测中)

×

×

流模式

SQL和DataStream

不涉及

OceanBase(公测中)

×

流模式和批模式

SQL

 

五、​​​​​​SQL数据视图

当业务逻辑比较复杂时,需要将多层嵌套写在DML语句中,但是这种方式定位问题比较困难。此时,我们可以通过定义数据视图的方式,将多层嵌套写在数据视图中,简化开发过程。

说明:数据视图仅用于辅助计算逻辑的描述,不会产生数据的物理存储。

1、​​​​​​语法

CREATE TEMPORARY VIEW viewName 
AS  [ (columnName[ , columnName]* ) ] 
queryStatement;
  • viewName:视图名称。
  • columnName:字段名称。
  • queryStatement:嵌套语句别名。

 

2、​​​​​​​​​​​​​​示例

下面代码是数据视图的一个使用案例。 

--源表
CREATE TEMPORARY TABLE datagen_source (
 name VARCHAR,
 score BIGINT
) WITH (
 'connector' = 'datagen',
 'rows-per-second'='1'
);

--结果表
CREATE TEMPORARY TABLE rds_output (
 name VARCHAR,
 score BIGINT
) WITH (
 'connector' = 'print'
);

--数据视图
CREATE TEMPORARY VIEW tmp_view AS 
SELECT 
 * 
FROM 
datagen_source;

--DML
INSERT INTO
rds_output
SELECT
name,
score
FROM
tmp_view;
  • 可以部署任务进行体验。

在SQL基础文件夹下新建data_view空白流作业,引擎与之前一致。将代码拷贝进去,点击右上角部署,点击确定。然后在作业运维界面,启动任务。

任务状态变成运行中后,点击任务进入任务详情,点击作业探查,点击运行日志下的Task Managers,点击Path,ID实例。

 

点击Stout,可以看到打印出的测试数据。

 


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

校园气膜馆助力青少年体质发展:少年强则国强—轻空间

青少年是国家的未来,体质的强健与否,直接关系到国家的竞争力和可持续发展。在现代社会,学习和压力并存,青少年的体育锻炼时间不断被压缩,如何提供更为优质的体育设施,帮助他们增强体质,成为学校…

【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)

“秒懂”学C/C不可错过的“经典编程题” — 日期类的经典运用 (含题链接) 1. 计算日期到天数转换(1). 解题思路:(2). 代码实现: 2. 打印日期(1). 解题思路:(2). 代码实现: 3. 日期累加(1). 解题思路:(2). 代…

Java 设计模式-状态模式

目录 一. 概述 二. 主要角色 三. 代码示例 四. 优缺点 优点: 缺点: 五. 常见应用场景 一. 概述 状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式把所有的与一个特定…

AES算法与接口解密

文章目录 AES算法基本介绍加密模式模式与IV 接口响应AES解密 AES算法 基本介绍 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。 对称加密算法中加解密密钥都是一样的。 AES 的主要特性: 块加密:AES 是一种分组加密算法&…

Vue day-04

目录 一. vue组件 1.1 为什么用组件 1.2 vue组件 1.3 基础使用 1.4 全局 - 注册使用 1.5 局部 - 注册使用 1.4 用less写的样式 二. Vue组件之间传值(重点) 2.1 父组件向子组件传值 2.2 子组件向父组件传值 2.3 兄弟之间的传递 三. vue生命周期 3.1 含义 3.2 钩子…

phpmyadmin报错mysqli::real_connect(): (HY000/1045): Access denied for user ‘

问题分析 这是因为本身还安装了MySQL,导致发生冲突,只需要找到自己安装的进行关闭即可 方法 在任务管理器(快捷键:ctrlaltdelete)-服务中,找到对应的MySQL进行关闭

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级&…

数字化转型的战略规划应该怎么做?(附IBM-IT战略规划方法论PPT下载)

IBM-IT战略规划方法论PPT-下载链接见文末~ 数字化转型的战略规划是一个系统而复杂的过程,需要从多个维度进行考虑和规划。以下是一些关键步骤和建议,以帮助企业制定有效的数字化转型战略规划: 1. 明确数字化转型愿景和目标 设定愿景&#…

基于ONSEMI电源管理芯片NCP1607之AC300V高输入电压36W调色温智能电源

NCP1607PFC在LED智能电源PFC处理部分性价比高,输入电压范围宽到AC90-300V,母线电压420V导致高压低电流整机光效高,成熟芯片可靠新高,没有任何纹波与频闪,智能护眼。 ►场景应用图 ►产品实体图 ►展示板照片 ►方案方块图 ►核心…

常见概念 -- OPA与插损预置

OPA基本原理 OPA功能,即光功率调节(Optical Power Adjust),在新建光层业务时使用。 ​单板正常工作后,在网管上创建单站光交叉时,可以创建自动模式的光交叉,即启动OPA功能。OPA功能通过软件计算,自动调节交…

MACD指标精讲PART1:MACD指标入门及使用法则

一、MACD指标入门 MACD(Moving Average Convergence Divergence)指标称为指数平滑异同移动平均线指标,是由Geral Apple所创造,用来跟踪股价运行趋势、判断股票买卖时机的技术分析工具。 MACD指标由DIFF线(Difference线…

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJ…

SprinBoot+Vue体育商品推荐的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

无人机反制:便携式无人机反制盾技术详解

便携式无人机反制盾技术是一种先进的无人机防御手段,专门设计用于抵御或干扰无人机的活动。以下是对该技术的详细解析: 一、技术概述 便携式无人机反制盾是一种手持或单兵便携式设备,通过集成多种技术手段,实现对无人机的有效识…

【STM32项目】基于STM32+RTOS音频光通信设计与实现(完整工程资料源码)

基于STM32音频光通信设计与实现 目录: 目录 目录: 一、背景及意义: 二、国内外研究现状 2.1 国外研究的现状 2.1.1 国际可见光通讯联盟 2.1.2 日本的研究进展 2.1.3 德国的研究进展 2.1.4 英国的研究进展 2.1.5 美国的研究进展 2.2 国外研究…

【docker】docker network 网络

docker network 网络 Docker 为什么需要网络管理docker 网络架构简介CNMLibnetwork驱动 常见网络类型docker 网络管理命令 Docker 为什么需要网络管理 容器的网络默认与宿主机及其他容器都是相互隔离, 但同时我们也要考虑下面的一些问题, 比如 多个容器…

Excel图表生成:自动化创建与修改Excel图表的技术指南

目录 引言 Excel图表基础 图表的作用与类型 Excel图表制作的基本步骤 自动化创建Excel图表 使用VBA宏自动化创建图表 自动化创建柱状图 自动化创建折线图 使用Python和第三方库自动化创建图表 安装必要的库 编写Python代码 修改Excel图表 修改图表类型和样式 自动…

网络学习-eNSP配置NAT

NAT实现内网和外网互通 #给路由器接口设置IP地址模拟实验环境 <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]undo info-center enable Info: Information center is disabled. [Huawei]interface gigabitethernet 0/0/0 [Huawei-Gigabi…

什么是COB超微小间距会议一体机?LED智能会议一体机重塑会议体验

在当今这个快节奏、高效率的时代&#xff0c;会议作为企业日常运营中不可或缺的一环&#xff0c;其效率与体验直接影响着企业的决策速度与团队协作能力。随着科技的飞速发展&#xff0c;传统的会议设备已难以满足现代会议室的多元化需求&#xff0c;LED智能会议一体机&#xff…

0基础跟德姆(dom)一起学AI Python进阶09-算法和数据结构

* 数据结构介绍 * 列表 * 链表 * 算法介绍 * 排序相关(冒泡, 插入, 选择, 快速排序) --- 1.数据结构和算法简介 * 程序 大白话翻译, **程序 数据结构 算法** * 数据结构 指的是 **存储, 组织数据的方式.** * 算法 指的是 **为了解决实际业务问题而思考 思路和方法…