Flink关系型API简介

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 在接触关系型API之前,用户通常会采用DataStream、DataSet API来编写Flink程序,它们都提供了丰富的处理能力,以DataStream为例,它有如下这些优点: 富有表现力的流处理,包括但不限于:转换数据,更新状态,定义窗口、聚合,事件时间语义,有状态且保证正确性等; 高度自定义.

在接触关系型API之前,用户通常会采用DataStream、DataSet API来编写Flink程序,它们都提供了丰富的处理能力,以DataStream为例,它有如下这些优点:

  • 富有表现力的流处理,包括但不限于:转换数据,更新状态,定义窗口、聚合,事件时间语义,有状态且保证正确性等;
  • 高度自定义的窗口逻辑:分配器、触发器、逐出器以及允许延迟等;
  • 提升与外部系统连接能力的异步I/O接口;
  • ProcessFunction给予用户访问时间戳和定时器等低层级的操作能力;

但它同时也存在一些使用壁垒导致它并不适合所有用户:

  • 写DataStream程序并非总是很容易:流处理技术发展很快,一些概念层出不穷,比如,时间、状态、窗口等;
  • 需要特殊的知识与技巧:持续的流计算应用需要特殊的要求以及Java/Scala的编程经验;

用户希望更专注于他们的业务逻辑,于是Flink提供了更具表达能力的API——关系型API。关系型API有很多好处:

  • 它是声明式的,用户只需告知它们想要的,系统决定如何计算,用户不必指定具体的实现细节;
  • 查询可被高效地优化和执行,相比之下底层API中的UDF则难于优化且需要人工调优;
  • 大众(尤其是数据分析领域的从业者)对SQL的了解和熟悉程度要远高于特定的编程语言;

关系型API其实是Table API和SQL API的统称:

  • Table API:为Java&Scala SDK提供类似于LINQ(语言集成查询)模式的API(自0.9.0版本开始)
  • SQL API:支持标准SQL(自1.1.0版本开始)

关系型API作为一个统一的API层,既能够做到在Batch模式的表上进行可终止地查询并生成有限的结果集,同时也能做到在Streaming模式的表上持续地运行并生产结果流,并且在两种模式的表上的查询具有相同的语法跟语义。这其中最重要的概念是Table,Table与DataSet、DataStream紧密结合,DataSet和DataStream都可以很容易地转换成Table,同样转换回来也很方便。下面的代码段展示了采用关系型API编写Flink程序的示例:

val tEnv = TableEnvironment.getTableEnvironment(env)
//配置数据源
val customerSource = CsvTableSource.builder()
  .path("/path/to/customer_data.csv")
  .field("name", Types.STRING).field("prefs", Types.STRING)
  .build()

//将数据源注册为一个Table
tEnv.registerTableSource(”cust", customerSource)

//定义你的table程序(在一个Flink程序中Table API和SQL API可以混用)
val table = tEnv.scan("cust").select('name.lowerCase(), myParser('prefs))
val table = tEnv.sql("SELECT LOWER(name), myParser(prefs) FROM cust")

//转换为DataStraem
val ds: DataStream[Customer] = table.toDataStream[Customer]

关系型API架构在基础的DataStream、DataSet API之上,其整体层次关系如下图所示:

table-sql-level

它们提供等价的特性集合,并且可以在同一个程序中混合使用,两者都与Flink的core API紧密集成。从上图来看,上层有两种API,而其下有两个基础(DataSet、DataStream)API作为后端。那这是否意味着实现时的四种组合的转换路径呢?其实,Flink并没有自己去实现转换、SQL的解析、执行计划的生成、优化等操作,它将一些“不擅长”的任务转交给了Apache Calcite。整体架构如下图:

table-sql-arch

Apache Calcite是一个SQL解析与查询优化框架(这个定义是从Flink关注的视角来看,Calcite官方的定义为动态的数据管理框架),目前已被许多项目选择用来解析并优化SQL查询,比如:Drill、Hive、Kylin等。

我们来对上面的架构图进行解读。从中上部我们看到,可以从DataSet、DataStream以及Table Source等多种渠道来创建Table,Table相关的一些信息比如schema、数据字段及类型等信息统一被注册并存放到Calcite Catalog中。这些信息将为Table & SQL API提供元数据。接着往下看,Table API跟SQL构建的查询将被翻译成共同的逻辑计划表示,逻辑计划将作为Calcite优化器的输入。优化器结合逻辑计划以及特定的后端(DataSet、DataStream)规则进行翻译和优化,随之产生不同的计划。计划将通过代码生成器,生成特定的后端程序。后端程序的执行将返回DataSet或DataStream。

这个架构图展示了Flink关系型API的整体架构,也是后续我们分析这个模块的基础。


原文发布时间为:2017-07-06

本文作者:vinoYang

本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
14天前
|
存储 算法 API
Flink DataStream API 批处理能力演进之路
本文由阿里云 Flink 团队郭伟杰老师撰写,旨在向 Flink Batch 社区用户介绍 Flink DataStream API 批处理能力的演进之路。
259 1
Flink DataStream API 批处理能力演进之路
|
18天前
|
Java 大数据 API
[AIGC] Flink入门教程:理解DataStream API(Java版)
[AIGC] Flink入门教程:理解DataStream API(Java版)
|
2月前
|
SQL 分布式计算 测试技术
Flink API的4个层次
【2月更文挑战第28天】
|
2月前
|
消息中间件 SQL Kafka
如何高效接入 Flink: Connecter / Catalog API 核心设计与社区进展
本文整理自阿里云实时计算团队 Apache Flink Committer 和 PMC Member 任庆盛在 FFA 2023 核心技术专场(二)中的分享。
302 1
如何高效接入 Flink: Connecter / Catalog API 核心设计与社区进展
|
2月前
|
分布式计算 API 数据处理
Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
【2月更文挑战第15天】Flink【基础知识 01】(简介+核心架构+分层API+集群架构+应用场景+特点优势)(一篇即可大概了解flink)
70 1
|
4月前
|
JSON 关系型数据库 MySQL
这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
【1月更文挑战第17天】【1月更文挑战第84篇】这个问题是由于Flink的Table API在处理MySQL数据时,将MULTISET类型的字段转换为了JSON格式
36 1
|
2天前
|
安全 API 开发者
智能体-Agent能力升级!新增Assistant API & Tools API服务接口
ModelScope-Agent是一个交互式创作空间,它支持LLM(Language Model)的扩展能力,例如工具调用(function calling)和知识检索(knowledge retrieval)。它已经对相关接口进行了开源,以提供更原子化的应用LLM能力。用户可以通过Modelscope-Agent上的不同代理(agent),结合自定义的LLM配置和消息,调用这些能力。
|
6天前
|
JSON 搜索推荐 数据挖掘
电商数据分析的利器:电商关键词搜索API接口(标题丨图片丨价格丨链接)
淘宝关键词搜索接口为电商领域的数据分析提供了丰富的数据源。通过有效利用这一接口,企业和研究人员可以更深入地洞察市场动态,优化营销策略,并提升用户体验。随着电商平台技术的不断进步,未来的API将更加智能和个性化,为电商行业带来更多的可能性。
|
13天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
23 1
|
14天前
|
SQL 数据管理 API
数据管理DMS产品使用合集之阿里云DMS提供API接口来进行数据导出功能吗
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。