56.md 3.2 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68


# 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)定义和用法。