• Flink之TableAPI和SQL(1):基本功能描述


    相关文章链接

    Flink之TableAPI和SQL(1):基本功能描述

    Flink之TableAPI和SQL(2):表和外部系统的连接方式

    Flink之TableAPI和SQL(3):通过TableAPI和SQL表的一些操作(包括查询,过滤,聚集等)

    Flink之TableAPI和SQL(4):表的Sink实现

    Flink之TableAPI和SQL(5):表的时间特性

    1、创建执行环境

    创建flink的执行环境,并基于flink的环境来创建table的运行环境

    2、流、表以及catalog注册表之间的转换

    1、通过tableEnv表运行环境,将流转为表

    2、通过tableEnv表运行环境,将 表 注册到catalog中(注册之后,可以直接使用sql,表名为传入的字符串)

    3、通过tableEnv表运行环境,将 流 注册到catalog中(注册之后,可以直接使用sql,表名为传入的字符串)

    4、将catalog中注册的表 转换成 Table表

    5、将Table表通过追加等方式转换成流(只有转换完成后才能进行输出打印等操作)

    3、TableAPI以及SQL的使用

    1、TableAPI要使用Table类型的来执行

    2、sql使用tableEnv(表环境)来执行,当注册到catalog中的表 可以直接使用sql查询

    3、当没有注册时可以通过使用拼接的方式来使用sql

    4、表的打印输出

    打印表结构 和 表(打印表需要将表 转换 成流才能打印)

    5、执行任务

    具体实现如下代码所示:

    // 1、创建执行环境
    // 1.1、创建flink的执行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    // 1.2、设置并行度
    env.setParallelism(2)
    // 1.3、基于flink的执行环境 创建 表的执行环境(流处理表环境)
    val tableEnv: StreamTableEnvironment = StreamTableEnvironment.create(env)
    
    // 2、创建流,通过流转表,将表注册到到catalog中,将catalog中的注册表进行转换,表转流并进行打印
    // 2.1、创建流(将字符串转成样例类 SensorReading )
    val sensorStream: DataStream[SensorReading] = env.readTextFile("D:\Project\IDEA\bigdata-study\flink-demo\src\main\resources\source.txt")
        .map(data => {
            val fields: Array[String] = data.split(",")
            SensorReading(fields(0), fields(1).trim.toLong, fields(2).trim.toDouble)
        })
    // 2.2、通过tableEnv表运行环境,将流转为表
    val sensorTable: Table = tableEnv.fromDataStream(sensorStream)
    // 2.3、通过tableEnv表运行环境,将 表 注册到catalog中(注册之后,可以直接使用sql,表名为传入的字符串)
    tableEnv.createTemporaryView("sensorTable_1", sensorTable)
    // 2.4、通过tableEnv表运行环境,将 流 注册到catalog中(注册之后,可以直接使用sql,表名为传入的字符串)
    tableEnv.createTemporaryView("sensorTable_2", sensorStream)
    // 2.5、将catalog中注册的表 转换成 Table表
    val outputTable: Table = tableEnv.from("sensorTable_2")
    // 2.6、将Table表通过追加等方式转换成流(只有转换完成后才能进行输出打印等操作)
    val outputStream: DataStream[Row] = outputTable.toAppendStream[Row]  //泛型传入Row或者元组
    
    // 3、执行TableAPI或者sql,进行查询
    // 3.1、TableAPI要使用Table类型的来执行
    val resultTable: Table = sensorTable
        .select('id, 'temperature)          // 可以使用 单引号 + 变量名
        .filter('id === "sensor_1")          // 在TableAPI中,等于使用 ===
    // 3.2、sql使用tableEnv(表环境)来执行,当注册到catalog中的表 可以直接使用sql查询
    val resultSqlTable_1: Table = tableEnv.sqlQuery("select id, temperature from sensorTable_2 where id = 'sensor_1'")
    // 3.3、当没有注册时可以通过使用拼接的方式来使用sql
    val resultSqlTable_2: Table = tableEnv.sqlQuery("select id, temperature from " + sensorTable + " where id = 'sensor_1'")
    
    // 4、打印表结构 和 表(打印表需要将表 转换 成流才能打印)
    resultSqlTable_2.printSchema()
    resultSqlTable_2.toAppendStream[Row].print()
    
    // 5、启动执行器,执行任务
    env.execute("BasicTableDemo")
  • 相关阅读:
    第四次作业
    第三次作业
    java第三次作业
    java第二次作业
    java作业
    第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
  • 原文地址:https://www.cnblogs.com/yangshibiao/p/14074170.html
Copyright © 2020-2023  润新知