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-tableMaven工件中。必须将以下依赖项添加到项目中才能使用 Table API和SQL:

  1. <dependency>
  2. <groupId>org.apache.flink</groupId>
  3. <artifactId>flink-table_2.11</artifactId>
  4. <version>1.7-SNAPSHOT</version>
  5. </dependency>

此外,您需要为Flink的Scala批处理或流API添加依赖项。对于批处理查询,您需要添加:

  1. <dependency>
  2. <groupId>org.apache.flink</groupId>
  3. <artifactId>flink-scala_2.11</artifactId>
  4. <version>1.7-SNAPSHOT</version>
  5. </dependency>

对于流式查询,您需要添加:

  1. <dependency>
  2. <groupId>org.apache.flink</groupId>
  3. <artifactId>flink-streaming-scala_2.11</artifactId>
  4. <version>1.7-SNAPSHOT</version>
  5. </dependency>

注意:由于Apache Calcite中的一个问题阻止了用户类加载器被垃圾收集,我们建议构建包含flink-table依赖项的fat-jar 相反,我们建议配置Flink以flink-table在系统类加载器中包含依赖项。这可以通过将flink-table.jar文件从./opt文件夹复制到文件夹来完成./lib有关详细信息,请参阅这些说明

下一步