Flink——Table_API和Flink_SQL

 简单案例应用

pom文件:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-java</artifactId>
    <version>1.10.1</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_2.12</artifactId>
    <version>1.10.1</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-planner_2.12</artifactId>
    <version>1.10.1</version>
</dependency>
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-planner-blink_2.12</artifactId>
    <version>1.10.1</version>
</dependency>

 文件数据:SensorReading类

sensor_1,1547718199,35.8
sensor_1,1547718199,23.8
sensor_6,1547718201,15.4
sensor_7,1547718202,6.7
sensor_7,1547718202,3.7
sensor_10,1547718205,38.1
sensor_10,1543228205,32.1
sensor_10,1147248205,40.1
package com.yrl.table;

import com.yrl.bean.SensorReading;
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.java.StreamTableEnvironment;
import org.apache.flink.types.Row;


public class Test01 {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);


        DataStreamSource<String> socketTextStream = env.readTextFile("D:\\大数据组件API\\Flink\\Flink01\\src\\main\\resources\\test.txt");

        DataStream<SensorReading> dataStream = socketTextStream.map(value -> {
            String[] split = value.split(",");
            return new SensorReading(split[0], new Long(split[1]), new Double(split[2]));
        });


        //创建表的执行环境
        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
        //基于流创建表,Table类型的对象
        Table table = tableEnv.fromDataStream(dataStream);
        //操作表api
        Table res = table.select("id,temperature").where("id='sensor_1'");
        //注册一个表
        tableEnv.createTemporaryView("sensor",table);
        //执行sql
        String sql = "select id,temperature from sensor where id='sensor_1'";
        Table sqlQuery = tableEnv.sqlQuery(sql);

        //输出
        tableEnv.toAppendStream(res,Row.class).print("table");
        tableEnv.toAppendStream(sqlQuery, Row.class).print("sql");
        


        env.execute();

    }
}

  新老版本Table环境创建

package com.yrl.table;

import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.EnvironmentSettings;
import org.apache.flink.table.api.TableEnvironment;
import org.apache.flink.table.api.java.BatchTableEnvironment;
import org.apache.flink.table.api.java.StreamTableEnvironment;

public class Test02 {
    public static void main(String[] args) {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);

        
        //1.1基于老版本planner的流处理
        EnvironmentSettings oldEnvSettings = EnvironmentSettings.newInstance().useOldPlanner()..inStreamingMode().build();
        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env,oldEnvSettings);

        //1.2基于老版本planner的批处理
        ExecutionEnvironment batchEnv = ExecutionEnvironment.getExecutionEnvironment();
        BatchTableEnvironment batchTableEnv = BatchTableEnvironment.create(batchEnv);

        //2.1基于新版本blink的流处理
        EnvironmentSettings newEnvSettings = EnvironmentSettings.newInstance().useBlinkPlanner()..inStreamingMode().build();
        StreamTableEnvironment tableEnv2 = StreamTableEnvironment.create(env,newEnvSettings);

        //2.2基于新版本blink的批处理
        EnvironmentSettings newEnvSettings2 = EnvironmentSettings.newInstance().useBlinkPlanner().inBatchMode().build();
        TableEnvironment batchTableEnv2 = TableEnvironment.create(newEnvSettings2);
        
       
        
        
        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值