Entity实体类WaterSensor:
package com.cnic.sql.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WaterSensor {
String id;
Long ts;
Integer vc;
}
主代码:
package com.cnic.sql.code;
import com.cnic.sql.entity.WaterSensor;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
import org.apache.flink.types.Row;
import static org.apache.flink.table.api.Expressions.$;
public class BasicUse {
public static void main(String[] args) {
// 创建流执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 设置全局并行度
env.setParallelism(1);
//数据来源
DataStreamSource<WaterSensor> waterSensorDataStream = env.fromElements(new WaterSensor("sensor_1", 1000L, 10),
new WaterSensor("sensor_1", 2000L, 20),
new WaterSensor("sensor_2", 3000L, 30),
new WaterSensor("sensor_1", 4000L, 40),
new WaterSensor("sensor_1", 5000L, 50),
new WaterSensor("sensor_2", 6000L, 60));
// TODO 1.创建表执行环境
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
// TODO 2.创建表:将流转换为动态表,表的字段名从pojo属性名自动获取
Table table = tableEnv.fromDataStream(waterSensorDataStream);
// TODO 3.对动态表进行查询
Table resultTable = table.where($("id").isEqual("sensor_1"))
.select($("id"), $("ts"), $("vc"));
// TODO 4.将动态表转换为流
DataStream<Row> resultStream = tableEnv.toAppendStream(resultTable, Row.class);
resultStream.print();
try {
env.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
}
打印结果: