Flink Table API写入数据到Elasticsearch

本案例使用flink的table API将数据写入es中,其中flink版本为1.10.0,es版本为7.6.2
package com.bigdata.table

import com.bigdata.apitest.source.SensorReading
import org.apache.flink.streaming.api.scala._
import org.apache.flink.table.api.{DataTypes, Table}
import org.apache.flink.table.api.scala._
import org.apache.flink.table.descriptors.{Elasticsearch, Json, Schema}

/**
  * @ description: 使用flink table API将数据写入es
  * @ author: spencer
  * @ date: 2020/7/29 16:53
  */
object ESTableApiTest {

  def main(args: Array[String]): Unit = {

    val env: StreamExecutionEnvironment = StreamExecutionEnvironment
      .getExecutionEnvironment

    val tableEnv: StreamTableEnvironment = StreamTableEnvironment.create(env)

    env.setParallelism(1)

    //获取DataStream
    val inputDataStream: DataStream[SensorReading] = env.readTextFile("D:\\IdeaProjects\\flink-project\\src\\main\\resources\\sensor.txt")
      .map(
        data => {
          val dataArray: Array[String] = data.split(",")
          SensorReading(dataArray(0), dataArray(1).toLong, dataArray(2).toDouble)
        }
      )

    val inputTable: Table = tableEnv.fromDataStream(inputDataStream)

    val resultTable: Table = inputTable
      .groupBy('id)
      // 必须导入table api的隐式转换:import org.apache.flink.table.api.scala._
      // 才能使用单引号+字段
      .select('id, 'id.count as 'total)

    // 定义ES的输出连接
    tableEnv.connect(
      new Elasticsearch()
        .version("6")
        .host("localhost", 9200, "http")
        .index("sensor")
        .documentType("_doc")
    )
      .inUpsertMode()
      .withFormat(new Json())
      .withSchema(new Schema()
        .field("id", DataTypes.STRING())
        .field("count", DataTypes.BIGINT())
      )
      .createTemporaryTable("esOutputTable")

    resultTable.insertInto("esOutputTable")

    env.execute("ESTableApiTest")
  }
}

es中查询结果如下:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值