1、将 DataStream 转换成表
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
val inputStream: DataStream[String] = env.readTextFile("sensor.txt")
val ds: DataStream[_02_SensorReading] = inputStream.map(data => {
val arr: Array[String] = data.split(",")
_02_SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
})
val settings = EnvironmentSettings.newInstance()
.useOldPlanner()
.inStreamingMode()
.build()
val tableEnv: StreamTableEnvironment = StreamTableEnvironment.create(env, settings)
val sensorTable: Table = tableEnv.fromDataStream(ds)
val sensorTable2: Table = tableEnv.fromDataStream(ds, 'timestamp as 'myTimeStamp, 'id as 'myId, 'temperature)
val sensorTable3: Table = tableEnv.fromDataStream(ds, 'myId, 'ts)
2、将表转换成 DataStream
val resultStream: DataStream[Row] = tableEnv.toAppendStream[Row](sensorTable)
val aggResultStream: DataStream[(Boolean, (String, Long))] =
tableEnv.toRetractStream[(String, Long)](sensorTable)
resultStream.print("result")
aggResultStream.print("aggResult")
3、创建临时视图
tableEnv.createTemporaryView("sensorView01",ds)
tableEnv.createTemporaryView("sensorView02",ds,'id ,'temperature,'timestamp as 'ts)
tableEnv.createTemporaryView("sensorView03",sensorTable)
4、表的输出
(1)输出到外部的系统
tableEnv.connect(
new FileSystem().path("")
).withFormat(new Csv())
.withSchema(
new Schema()
.field("id",DataTypes.STRING())
.field("temp",DataTypes.DOUBLE())
).createTemporaryTable("outputTable")
sensorTable.insertInto("outputTable")
(2)输出到kafka
tableEnv.connect(
new Kafka()
.version("0.11")
.topic("sinkTest")
.property("zookeeper.connect", "localhost:2181")
.property("bootstrap.servers", "localhost:9092")
)
.withFormat( new Csv() )
.withSchema( new Schema()
.field("id", DataTypes.STRING())
.field("temp", DataTypes.DOUBLE())
)
.createTemporaryTable("kafkaOutputTable")
sensorTable.insertInto("kafkaOutputTable")
(3)输出到 ElasticSearch
tableEnv.connect(
new Elasticsearch()
.version("6")
.host("localhost", 9200, "http")
.index("sensor")
.documentType("temp")
)
.inUpsertMode()
.withFormat(new Json())
.withSchema( new Schema()
.field("id", DataTypes.STRING())
.field("count", DataTypes.BIGINT())
)
.createTemporaryTable("esOutputTable")
sensorTable.insertInto("esOutputTable")
(4)输出到 MySql
val sinkDDL: String =
"""
|create table jdbcOutputTable (
| id varchar(20) not null,
| cnt bigint not null
|) with (
| 'connector.type' = 'jdbc',
| 'connector.url' = 'jdbc:mysql://localhost:3306/test',
| 'connector.table' = 'sensor_count',
| 'connector.driver' = 'com.mysql.jdbc.Driver',
| 'connector.username' = 'root',
| 'connector.password' = '123456'
|)
""".stripMargin
tableEnv.sqlUpdate(sinkDDL)
sensorTable.insertInto("jdbcOutputTable")