Flink Table与其他类型的转换

1. 将DataStream转换成Table

//DataStream可直接转换为Table,方便调用Table api做各种转换、输出操作
val dataStream: DataStream[YourModelObject] = ...
val table: Table = tableEnv.fromDataStream(dataStream)

//转换后的Table schema 与DataStream中定义的属性一一对应, 亦可显式指定出来,如:
val dataStream: DataStream[YourModelObject] = ...
val table: Table = tableEnv.fromDataStream(dataStream, 'id, 'timestamp, 'temperature)

2. 将DataStream中数据类型, 与Table的schema的对应关系

有两种类型:

    1. 基于字段名称
    1. 基于字段位置
//1.基于名称(name-based)
val table: Table = tableEnv.fromDataStream(dataStream,  'temperature, 'id as 'myId, 'timestamp as 'ts)

//2.基于位置(position-based)
val table: Table = tableEnv.fromDataStream(dataStream, 'ts, 'myId)

3.为DataStream或Table数据创建一个临时视图

//1.基于DataStream创建临时视图
tableEnv.createTemporaryView("sensorDataStream", dataStream)

//2.基于Table创建临时视图
tableEnv.createTemporaryView("sensorTable", sensorTable)

4. Table表输出

表的输出是通过把数据写入到具体的TableSink来实现.
TableSink是一个通用java接口, 可以支持不同的数据落地存储方式: 文件、RDBMS、KV-DB、MQ等.

在api的表现上, 为: 使用 Table.insertinto()方法, 将一个Table写入到已经注册过的TableSink里.

tableEnv.connect(...).createTemporaryTable("outputTable")
val resultTable: Table = ...
resultTable.insertInto("outputTable")

//例如:
    //3.1 使用table api
    //做简单转换
    val simpleTramsformTable = sensorTable
      //scala里的表达式写法(Expression)
      .select( 'id, 'temper )
      .filter( 'id === "sensor1" )
      
    // 输出到文件中
    val outputPath = "D:\\IdeaProject-ws-3\\FlinkTutorialScala\\src\\main\\resources\\input\\sensor_output.txt"

    tableEnv.connect( new FileSystem().path( outputPath ) )
      .withFormat( new Csv() )
      .withSchema(
        new Schema()
          .field( "id", DataTypes.STRING() )
          .field( "temper", DataTypes.DOUBLE() )
      )
      .createTemporaryTable( "outputTable" )

    simpleTramsformTable.insertInto( "outputTable" )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值