Table API和SQL
前面我们介绍过,Flink的API是分层的,而Table API与SQL就位于最顶层。也就是说Table API和SQL是Flink中封装程度最高的API。
由于Flink 自从 0.9 版本开始支持 Table & SQL 功能一直处于完善开发中,且在不断进行迭代。所以我们可以看到Flink官网有这样一段话:
Please note that the Table API and SQL are not yet feature complete and are being actively developed. Not all operations are supported by every combination of [Table API, SQL] and [stream, batch] input.
可以看出Table API和SQL对有些算子还没有支持。所以在使用Flink原生Table API和SQL时最好要明确其是否支持业务场景。若现有的Table API和SQL无法满足业务需求,那么我们就需要使用DataStream API或DataSet API来实现了。
尽管Table API和SQL还不完美,但是它们的出现从某种意义上来说使得Flink实现了批、流统一。
接下来我们一起了解一下Flink中Table API和SQL是如何使用的。
需要引入的pom依赖
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-api-java-bridge_2.11</artifactId>
<version>1.11.0</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-planner-blink_2.11</artifactId>
<version>1.11.0</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-table-common</artifactId>
<version>1.11.0</version>
<!--<scope>provided</scope>-->
</dependency>
注意:官网给的pom依赖是带有< scope >provided</ scope >的,这个在本地开发环境中需要注释掉。
简单了解Table
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
DataStreamSource<String> inputData = env.readTextFile("F:\\workspace\\flinkjavademo\\src\\main\\resources\\Sensor.txt");
DataStream<Sensor> dataStream = inp