概览

Table API & SQL

Apache Flink具有两个关系API-Table API和SQL-用来统一流和批处理。Table API是用于Scala和Java语言的集成查询API,它以非常直观的方式组合来自关系运算符(如selection,filter和join)的查询。Flink对SQL的支持基于实现SQL标准的Apache Calcite。无论是批输入(DataSet)还是流输入(DataStream),在两个接口中指定的查询具有相同的语义并指定相同的结果。

Table API和SQL接口以及Flink的DataStream和DataSet API紧密集成在一起。你可以在所有API和基于这些API的库之间轻松切换。例如,你可以使用CEP库从DataStream中提取模式,然后再使用Table API分析模式,或者,在对预处理数据运行Gelly 图形算法之前,可以使用SQL query来扫描、过滤和聚合批处理表。

请注意,Table API和SQL的部分功能尚未完成,正在积极开发中。[Table API,SQL]和[stream,batch]输入的各种组合并非都支持所有操作。

依赖结构

从Flink 1.9开始,Flink提供了两种不同的planner实现来评估Table&SQL API程序:Blink planner和Flink 1.9之前用的旧planner。Planners负责将关系运算符转换为可执行的,优化的Flink作业。两个planner都带有不同的优化规则和运行时类。它们在支持的特性方面也有所不同。

注意:对于生产案例,建议使用Flink 1.9之前的旧的planner。

所有Table API和SQL组件都捆绑在flink-table或flink-table-blink的Maven构件中。

大部分项目会使用如下依赖:

  • flink-table-common:用于通过自定义功能,格式等扩展table 生态系统的通用模块。
  • flink-table-api-java:适用于使用Java编程语言的纯table程序的Table&SQL API(处于开发初期,不建议使用!)。
  • flink-table-api-scala:使用Scala编程语言的纯table程序的Table&SQL API(处于开发初期,不建议使用!)。
  • flink-table-api-java-bridge:使用Java编程语言,带有DataStream / DataSet API的Table&SQL API支持。
  • flink-table-api-scala-bridge:使用Scala编程语言支持具有DataStream / DataSet API的Table&SQL API。
  • flink-table-planner:table程序planner和runtime。这是1.9版本之前Flink的唯一planner。仍推荐使用。
  • flink-table-planner-blink:新的Blink planner。
  • flink-table-runtime-blink:新的Blink runtime。
  • flink-table-uber:将上述API模块以及旧的planner打包到大多数Table&SQL API用例的分发中。默认情况下,uber JAR文件flink-table-*.jar位于/libFlink版本的目录下。
  • flink-table-uber-blink:将上述API模块以及特定于Blink的模块打包到大多数Table&SQL API用例的分发中。默认情况下,uber JAR文件flink-table-blink-*.jar位于/libFlink版本的目录下。

有关如何在table程序中旧的和新的Blink planner之间进行切换的更多信息,请参见通用API页面。

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.10.0</version>
  <scope>provided</scope>
</dependency>
<!-- or... -->
<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-table-api-scala-bridge_2.11</artifactId>
  <version>1.10.0</version>
  <scope>provided</scope>
</dependency>

此外,如果要在IDE中本地运行Table API和SQL程序,则必须添加以下一组模块之一,具体取决于要使用的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.10.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.10.0</version>
  <scope>provided</scope>
</dependency>

在内部,table生态系统的一部分在Scala中实现。因此,请确保为批处理和流应用程序都添加以下依赖项:

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

扩展依赖

如果要实现与Kafka或一组自定义函数进行交互的自定义格式,则以下依赖关系就足够了,并且可以用于SQL Client的JAR文件:

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

接下来要去哪里?

  • 概念和通用API:Table API和SQL共享的概念和API。
  • 数据类型:预定义的数据类型及其属性。
  • 流概念:Table API或SQL的流特性文档,例如时间属性的配置和更新结果的处理。
  • 连接到外部系统:可用的连接器及格式,用于向外部系统读取和写入数据。
  • Table API:Table API支持的操作和API。
  • SQL:SQL支持的操作和语法。
  • 内置函数:Table API和SQL支持的函数。
  • SQL客户端:在没有编程基础的情况下使用Flink SQL并将table程序提交到集群。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值