flink模式与表模式

waxmsbnn  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(576)

我使用的是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

这是使用这些物体的正常方法吗(在我看来很奇怪)

t8e9dugd

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)的当前方式。

相关问题