如何将模式附加到Flink DataStream - 即时?

时间:2018-02-09 00:20:35

标签: apache-flink flink-streaming flink-cep flink-sql

我正在处理数据库突变流,即更改日志流。我希望能够使用SQL查询转换值。 我很难将以下三个概念放在一起 RowTypeInfoRowDataStream

注意:我事先并不了解架构。我使用Mutation对象中的数据(Mutation是自定义类型)在运行中构建它

更具体地说,我的代码看起来像这样。

val execEnv = StreamExecutionEnvironment.getExecutionEnvironment
val tableEnv: StreamTableEnvironment = TableEnvironment.getTableEnvironment(execEnv)

// Mutation is a custom type
val mutationStream: DataStream[Mutation] = ...
// toRows returns an object of type org.apache.flink.types.Row
val rowStream:DataStream[Row] = mutationStream.flatMap({mutation => toRows(mutation)})
tableEnv.registerDataStream("spinal_tap_table", rowStream)
tableEnv.sql("select col1 + 2")

注意:Row对象是位置对象,并且没有列名称的占位符。 我找不到将架构附加到DataStream对象的位置。

我想传递某种类似于Row的结构,其中包含查询的完整信息{columnName: String, columnValue: Object, columnType: TypeInformation[_]}

1 个答案:

答案 0 :(得分:2)

在Flink SQL中,Table定义时必须使用表模式。无法对动态类型记录运行查询。

关于RowTypeInfoRowDataStream的概念:

  • Row是保存数据的实际记录
  • RowTypeInfoRow的架构描述。它包含TypeInformation的每个字段的名称和Row
  • DataStream是一个逻辑的记录流。 DataStream[Row]是一个行流。请注意,这不是实际的流,而只是用于表示API中的流的API概念。