我使用的是flink sql api,我对所有的“模式”类型都有点迷茫: TableSchema
, Schema
(来自 org.apache.flink.table.descriptors.Schema
)以及 TypeInformation
.
一 TableSchema
可以从 TypeInformation
,一个 TypeInformation
可以从 TableSchema
和一个 Schema
可以从 TableSchema
但它看起来像一个 Schema
无法转换回 TypeInformation
或者 TableSchema
(?)
为什么有3种不同类型的对象来存储相同类型的信息?
例如,假设我有一个来自avro模式文件的字符串模式,我想向它添加一个新字段。为此,我找到的唯一解决办法是:
String mySchemaRaw = ...;
TypeInformation<Row> typeInfo = AvroSchemaConverter.convertToTypeInfo(mySchemaRaw);
Schema newSchema = new Schema().schema(TableSchema.fromTypeInfo(typeInfo));
newSchema = newSchema.field("nexField",...);
// Need the newSchema as a TableSchema
这是使用这些物体的正常方法吗(在我看来很奇怪)
1条答案
按热度按时间t8e9dugd1#
TypeInformation
以及TableSchema
解决不同的问题。TypeInformation
是如何将记录类(如行或pojo)从一个操作符传送到另一个操作符的物理信息。TableSchema
描述独立于基础每记录类型的表的架构。它类似于CREATE TABLE name (a INT, b BIGINT)
ddl语句。在sql中,也没有定义像CREATE TABLE name ROW(a INT, B BIGINT)
. 但架构和行类型确实是相关的,这就是为什么提供转换器方法的原因。一旦像这样的概念PRIMARY KEY
等。Schema
是指定非sql概念(如时间属性和字段Map)的当前方式。