Flink关系型API简介

简介: 在接触关系型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+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日以线上峰会的形式与大家见面。
目录
相关文章
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
本文整理自阿里云智能集团 Flink PMC Member & Committer 徐榜江(雪尽)在 FFA 2024 分论坛的分享,涵盖四大主题:Flink CDC、YAML API、Transform + AI 和 Community。文章详细介绍了 Flink CDC 的发展历程及其优势,特别是 YAML API 的设计与实现,以及如何通过 Transform 和 AI 模型集成提升数据处理能力。最后,分享了社区动态和未来规划,欢迎更多开发者加入开源社区,共同推动 Flink CDC 的发展。
1138 12
Flink CDC YAML:面向数据集成的 API 设计
|
SQL 人工智能 关系型数据库
Flink CDC YAML:面向数据集成的 API 设计
Flink CDC YAML:面向数据集成的 API 设计
938 5
|
SQL 分布式计算 测试技术
概述Flink API中的4个层次
【7月更文挑战第14天】Flink的API分为4个层次:核心底层API(如ProcessFunction)、DataStream/DataSet API、Table API和SQL。
|
Kubernetes Oracle 关系型数据库
实时计算 Flink版操作报错合集之用dinky在k8s上提交作业,会报错:Caused by: org.apache.flink.table.api.ValidationException:,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
760 0
|
API 计算机视觉
MLDL之API:关于各国内外大平台API简介、使用方法之详细攻略
MLDL之API:关于各国内外大平台API简介、使用方法之详细攻略
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
1389 152

热门文章

最新文章