1.18.Table API & SQL
1.18.1.概念
1.18.1.1.依赖图
1.18.1.2.Table程序依赖
1.18.1.3.扩展依赖

1.18.Table API & SQL

1.18.1.概念

Apache Flink 有两种关系型 API 来做流批统一处理:Table API 和 SQL。Table API 是用于 Scala 和 Java 语言的查询API,它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。Flink SQL 是基于 Apache Calcite 来实现的标准 SQL。这两种 API 中的查询对于批(DataSet)和流(DataStream)的输入有相同的语义,也会产生同样的计算结果。
Table API 和 SQL 两种 API 是紧密集成的,以及 DataStream 和 DataSet API。你可以在这些 API 之间,以及一些基于这些 API 的库之间轻松的切换。比如,你可以先用 CEP 从 DataStream 中做模式匹配,然后用 Table API 来分析匹配的结果;或者你可以用 SQL 来扫描、过滤、聚合一个批式的表,然后再跑一个 Gelly 图算法 来处理已经预处理好的数据。
注意:Table API 和 SQL 现在还处于活跃开发阶段,还没有完全实现所有的特性。不是所有的 [Table API,SQL] 和 [流,批] 的组合都是支持的。

1.18.1.1.依赖图

从1.9开始,Flink 提供了两个 Table Planner 实现来执行 Table API 和 SQL 程序:Blink Planner 和 Old Planner,Old Planner 在1.9之前就已经存在了。 Planner 的作用主要是把关系型的操作翻译成可执行的、经过优化的 Flink 任务。两种 Planner 所使用的优化规则以及运行时类都不一样。 它们在支持的功能上也有些差异。

**注意:**对于生产环境,我们建议使用在1.11版本之后已经变成默认的Blink Planner。
所有的 Table API 和 SQL 的代码都在 flink-table 或者 flink-table-blink Maven artifacts 下。
下面是各个依赖:
flink-table-common: 公共模块,比如自定义函数、格式等需要依赖的。
flink-table-api-java: Table 和 SQL API,使用 Java 语言编写的,给纯 table 程序使用(还在早期开发阶段,不建议使用)
flink-table-api-scala: Table 和 SQL API,使用 Scala 语言编写的,给纯 table 程序使用(还在早期开发阶段,不建议使用)
flink-table-api-java-bridge: Table 和 SQL API 结合 DataStream/DataSet API 一起使用,给 Java 语言使用。
flink-table-api-scala-bridge: Table 和 SQL API 结合 DataStream/DataSet API 一起使用,给 Scala 语言使用。
flink-table-planner: table Planner 和运行时。这是在1.9之前 Flink 的唯一的 Planner,但是从1.11版本开始我们不推荐继续使用。
flink-table-planner-blink: 新的 Blink Planner,从1.11版本开始成为默认的 Planner。
flink-table-runtime-blink: 新的 Blink 运行时。
flink-table-uber: 把上述模块以及 Old Planner 打包到一起,可以在大部分 Table & SQL API 场景下使用。打包到一起的 jar 文件 flink-table-.jar 默认会直接放到 Flink 发行版的 /lib 目录下。
flink-table-uber-blink: 把上述模块以及 Blink Planner 打包到一起,可以在大部分 Table & SQL API 场景下使用。打包到一起的 jar 文件 flink-table-blink-
.jar 默认会放到 Flink 发行版的 /lib 目录下。

关于如何使用Old Planner以及Blink Planner,可以参考公共API.

1.18.1.2.Table程序依赖

取决于你使用的编程语言,选择Java或者Scala API来构建你的Table API和SQL程序:

<!-- Either... -->
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-java-bridge_2.11</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency>
<!-- or... -->
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-api-scala-bridge_2.11</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency>

除此之外,如果你想在 IDE 本地运行你的程序,你需要添加下面的模块,具体用哪个取决于你使用哪个 Planner:

<!-- Either... (for the old planner that was available before Flink 1.9) -->
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-planner_2.11</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency><!-- or.. (for the new Blink planner) -->
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-planner-blink_2.11</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency>

内部实现上,部分 table 相关的代码是用 Scala 实现的。所以,下面的依赖也需要添加到你的程序里,不管是批式还是流式的程序:

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-streaming-scala_2.11</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency>

1.18.1.3.扩展依赖

如果你想实现自定义格式来解析Kafka数据,或者自定义函数,下面的依赖就足够了,编译出来的jar文件可以直接给SQL Client使用:

<dependency><groupId>org.apache.flink</groupId><artifactId>flink-table-common</artifactId><version>1.12.0</version><scope>provided</scope>
</dependency>

当前,本模块包含以下可以扩展的接口:
SerializationSchemaFactory
DeserializationSchemaFactory
ScalarFunction
TableFunction
AggregateFunction

接下来:
公共概念和 API: Table API 和 SQL 公共概念以及 API。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/common.html】
数据类型: 内置数据类型以及它们的属性 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/types.html】
流式概念: Table API 和 SQL 中流式相关的文档,比如配置时间属性和如何处理更新结果。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/streaming/】
连接外部系统: 读写外部系统的连接器和格式。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/connect.html】
Table API: Table API 支持的操作。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/tableApi.html】
SQL: SQL 支持的操作和语法。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/sql/】
内置函数: Table API 和 SQL 中的内置函数。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/functions/systemFunctions.html】
SQL Client: 不用编写代码就可以尝试 Flink SQL,可以直接提交 SQL 任务到集群上。 【https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/dev/table/sqlClient.html】

1.18.Table API SQL(概念、依赖图、Table程序依赖、扩展依赖)相关推荐

  1. (十八)Flink Table API SQL 编程指南 Table API 和Datastream API 集成

    文章目录 DataStream 和 Table 之间的转换 依赖项和导入 配置 执行行为 datastream API table API 批处理运行时模式 Changelog统一 处理(仅插入)流 ...

  2. 2021年大数据Flink(三十):Flink ​​​​​​​Table API  SQL 介绍

    目录 ​​​​​​​Table API & SQL 介绍 为什么需要Table API & SQL ​​​​​​​Table API& SQL发展历程 架构升级 查询处理器的选 ...

  3. Flink Table Api SQL 初体验,Blink的使用

    概述 Flink具有Table API和SQL-用于统一流和批处理. Table API是用于Scala和Java的语言集成查询API,它允许以非常直观的方式组合来自关系运算符(例如选择,过滤和联接) ...

  4. Flink Table API SQL编程指南(自定义Sources Sinks)

    TableSource TableSource提供对存储在外部系统(数据库,键值存储,消息队列)或文件中的数据的访问的通用接口.在TableEnvironment中注册TableSource后,可以通 ...

  5. 使用flink Table Sql api来构建批量和流式应用(2)Table API概述

    从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...

  6. Flink Table API和SQL(下)

    传送门: Flink Table API和SQL(上)(基本API介绍+流处理表的特性) Flink Table API和SQL(中)(时间属性及窗口+聚合查询+联结查询) Flink Table A ...

  7. 大话Flink之十一Table API 和 Flink SQL

    目录 Table API 和 Flink SQL 1 Table API 和 Flink SQL 是什么 2 基本程序结构 3 创建 TableEnvironment 4 表(Table) 4.1 创 ...

  8. Flink学习笔记(十一)Table API 和 SQL

    文章目录 11. Table API 和 SQL 11.1 快速上手 11.1.1 需要依赖 11.1.2 示例 11.2 基本 API 11.2.1 程序架构 11.2.2 创建表环境 11.2.3 ...

  9. 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL

    第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 文章目录 第六课 大数据技术之Fink1.13的实战学习-Table Api和SQL 第一节 Fink SQL快速上手 1. ...

最新文章

  1. 看有道难题比赛有恶心感 ,付源码挑战,博客园目前纯速度最快。
  2. Windows Server 2016 + Exchange 2016 +Office365混合部署(四)
  3. Cannot call sendRedirect() after the response has been committed解决方法
  4. 微软推出新逆天开源语言Bosque,告别 for 循环,提高开发效率!
  5. 区块链新一代监管框架 ---《STRISA 一种实施旅行规则的新架构》
  6. win10系统Mysql5.7服务启动报:“1053错误:服务没有及时响应启动或控制请求“
  7. 主线程等待一个 无阻塞函数 死循环子线程的安全退出
  8. ZTEK串口转USB驱动
  9. 企业集成平台与SOA架构
  10. SIP软电话开发的基本条件和要点
  11. 周受资从小米跳槽字节跳动任CFO、拜腾创始人戴雷将加盟恒大汽车 | 高管变动2021年3月22日-28日...
  12. Vue2.0+Vue3.0全套教程
  13. P02014250陈彦菁 信息论
  14. 骨传导耳机的音质怎么样?
  15. Torvalds谈Linux行为准则
  16. 排列序列(第k个排列)
  17. 2020最新pycharm汉化安装(亲测有效)
  18. 机甲大师机器人控制(三):软件架构设计
  19. kafka扩容数据自动重分配脚本
  20. 苹果生产日期对照表2020_苹果官方确认:部分批次AirPodsPro会有声音故障问题

热门文章

  1. django项目中使用KindEditor富文本编辑器
  2. Python中使用代码将后缀名doc文件改为docx
  3. Django框架(15.Django中的自关联)
  4. VTK:网格上插值网格用法实战
  5. wxWidgets:操作档案manipulate archives的示例应用程序
  6. wxWidgets:wxEraseEvent类用法
  7. wxWidgets:wxTipProvider概述
  8. wxWidgets:常用对话框
  9. boost::push_front相关的测试程序
  10. boost::gil模块临界点threshold的测试程序