FlinkSql(二)API使用-source

0.前言

FlinkSql的使用与流式计算结构是一样的,source、transform、sink,因此首先研究source。

1创建表环境

//创建流式计算的执行环境
val env = StreamExecutionEnvironment.getExecutionEnvironment
//表环境基于流式计算的环境create
val tableEnv : StreamTableEnvironment = StreamTableEnvironment.create(env)

2source(fromDataStream)

    //读取数据
    val data = env.readTextFile()
    //转换数据格式
    val dataStream = data.map(
      line => {
        ...
      }
    )
    val tableEnv : StreamTableEnvironment = StreamTableEnvironment.create(env)
    //第一种读取数据方式,直接读取DataStream返回Table
    val tableData: Table = tableEnv.fromDataStream(dataStream)
    val table: Table = tableData.select(...)
      .filter(...)
    val ds: DataStream[(String, Double)] = table.toAppendStream[(String,Double)]
    ds.print()

3source(kafka)

    // 1. 创建表执行环境
    val tableEnv = StreamTableEnvironment.create(env)

    // 2 定义到kafka的连接,创建输入表
    tableEnv.connect(new Kafka()
      .version("0.11") // 定义版本
      .topic("sensor") // 定义主题
      .property("zookeeper.connect", "hdp-1:2181")
      .property("bootstrap.servers", "hdp-1:9092")
    )
      .withFormat(new Csv())
      .withSchema(new Schema()
        .field("id", DataTypes.STRING())
        .field("timestamp", DataTypes.BIGINT())
        .field("temperature", DataTypes.DOUBLE())
        .field("pt", DataTypes.TIMESTAMP(3))
        .proctime()
      )
      .createTemporaryTable("kafkaInputTable")

4source(FileSystem)

    // 2. 连接外部系统,读取数据
    val filePath = "..."
    tableEnv.connect(new FileSystem().path(filePath))
      .withFormat(new OldCsv()) // 定义从外部文件读取数据之后的格式化方法
      .withSchema(new Schema()
      .field("id", DataTypes.STRING())
      .field("timestamp", DataTypes.BIGINT())
      .field("temperature", DataTypes.DOUBLE())
    ) // 定义表的结构
      .createTemporaryTable("inputTable") // 在表环境注册一张表

猜你喜欢

转载自blog.csdn.net/weixin_43233971/article/details/107887477
今日推荐