本文主要是介绍FlinkX的数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
FlinkX的数据类型
从上一章节里面看到:
DataStream<Row> dataStream = dataReader.readData();
这个简单的代码里面我们可以得出
- 每一行数据都转化为了Row对象
- 数据转化为了数据流
我们下面看一下Row是如何满足所有的数据类型的?
FlinkX 中的 Row
这里的Row是指的org.apache.flink.types.Row
A Row can have arbitrary number of fields and contain a set of fields, which may all be different types. The fields in Row can be null. Due to Row is not strongly typed, Flink’s type extraction mechanism can’t extract correct field types. So that users should manually tell Flink the type information via creating a RowTypeInfo.
The fields in the Row can be accessed by position (zero-based) getField(int). And can set fields by setField(int, Object).
Row is in principle serializable. However, it may contain non-serializable fields, in which case serialization will fail.
Row 介绍
下面先看一下Row
在整个Flink的定位
Flink 在其内部构建了一套自己的类型系统,Flink 现阶段支持的类型分类如图所示,从图中可以看到 Flink 类型可以分为基础类型(Basic)
、数组(Arrays)
、复合类型(Composite)
、辅助类型(Auxiliary)
、泛型和其它类型(Generic)
。Flink 支持任意的 Java 或是 Scala 类型。不需要像 Hadoop 一样去实现一个特定的接口(org.apache.hadoop.io.Writable),Flink 能够自动识别数据类型。
示例
所以Row不是FlinkX的概念,而是Flinx的概念,就是一行数据的抽象。同样的在DataX中是Record、在Hbase中也是Row,Hive的一行数据,关系数据库的一行数据,等等…
Mysql 读取Row
public Row nextRecordInternal(Row row) throws IOException {if (!hasNext) {return null;}row = new Row(columnCount);try {for (int pos = 0; pos < row.getArity(); pos++) {Object obj = resultSet.getObject
这篇关于FlinkX的数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!