

# Table API和SQL

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


Apache Flink具有两个关系API - Table API和SQL - 用于统一流和批处理。 Table API是Scala和Java语言集成查询API，允许以非常直观的方式组合来自关系 算子的查询，例如选择，过滤和连接。Flink的SQL支持基于实现SQL标准的[Apache Calcite](https://calcite.apache.org)。无论输入是批输入（DataSet）还是流输入（DataStream），任一接口中指定的查询都具有相同的语义并指定相同的结果。

Table API和SQL接口彼此紧密集成，以及Flink的DataStream和DataSet API。您可以轻松地在基于API构建的所有API和库之间切换。例如，您可以使用[CEP库](https://flink.sojb.cn/dev/libs/cep.html)从DataStream中提取模式，然后使用 Table API分析模式，或者可以在预处理上运行[Gelly图算法](https://flink.sojb.cn/dev/libs/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`。有关详细信息，请参阅[这些说明](https://flink.sojb.cn/dev/linking.html)

## 下一步

*   [Concepts＆Common API](https://flink.sojb.cn/dev/table/common.html)： Table API和SQL的共享概念和API。
*   [Streaming Table API和SQL](https://flink.sojb.cn/dev/table/streaming.html)： Table API或SQL的特定于流的文档，例如时间属性的配置和更新结果的处理。
*   [Table API](https://flink.sojb.cn/dev/table/tableApi.html)： [Table API](https://flink.sojb.cn/dev/table/tableApi.html)支持的 算子操作和API。
*   [SQL](https://flink.sojb.cn/dev/table/sql.html)：支持[SQL的](https://flink.sojb.cn/dev/table/sql.html) 算子操作和语法
*   [表源和接收器](https://flink.sojb.cn/dev/table/sourceSinks.html)：从外部存储系统读取表并将表发送到外部存储系统。
*   [用户定义的函数](https://flink.sojb.cn/dev/table/udfs.html)：[用户定义函数的](https://flink.sojb.cn/dev/table/udfs.html)定义和用法。

