Table API和SQL
Apache Flink具有两个关系API - Table API和SQL - 用于统一流和批处理。 Table API是Scala和Java语言集成查询API,允许以非常直观的方式组合来自关系 算子的查询,例如选择,过滤和连接。Flink的SQL支持基于实现SQL标准的Apache Calcite。无论输入是批输入(DataSet)还是流输入(DataStream),任一接口中指定的查询都具有相同的语义并指定相同的结果。
Table API和SQL接口彼此紧密集成,以及Flink的DataStream和DataSet API。您可以轻松地在基于API构建的所有API和库之间切换。例如,您可以使用CEP库从DataStream中提取模式,然后使用 Table API分析模式,或者可以在预处理上运行Gelly图算法之前使用SQL查询扫描,过滤和聚合批处理表数据。
请注意, Table API和SQL尚未完成函数并且正在积极开发中。并非[ Table API,SQL]和[stream,batch]输入的每种组合都支持所有 算子操作。
建立
Table API和SQL捆绑在flink-table
Maven工件中。必须将以下依赖项添加到项目中才能使用 Table API和SQL:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table_2.11</artifactId>
<version>1.7-SNAPSHOT</version>
</dependency>
此外,您需要为Flink的Scala批处理或流API添加依赖项。对于批处理查询,您需要添加:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_2.11</artifactId>
<version>1.7-SNAPSHOT</version>
</dependency>
对于流式查询,您需要添加:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_2.11</artifactId>
<version>1.7-SNAPSHOT</version>
</dependency>
注意:由于Apache Calcite中的一个问题阻止了用户类加载器被垃圾收集,我们_不_建议构建包含flink-table
依赖项的fat-jar 。相反,我们建议配置Flink以flink-table
在系统类加载器中包含依赖项。这可以通过将flink-table.jar
文件从./opt
文件夹复制到文件夹来完成./lib
。有关详细信息,请参阅这些说明
下一步
- Concepts&Common API: Table API和SQL的共享概念和API。
- Streaming Table API和SQL: Table API或SQL的特定于流的文档,例如时间属性的配置和更新结果的处理。
- Table API: Table API支持的 算子操作和API。
- SQL:支持SQL的 算子操作和语法
- 表源和接收器:从外部存储系统读取表并将表发送到外部存储系统。
- 用户定义的函数:用户定义函数的定义和用法。