文章目录
table schema定义了Flink Table的数据表结构,包括字段名称,类型,同时Table Schema会和Table Format相匹配,在Table数据输入或输出过程中完成Schema的转换
但是当Table Input/Output Format和Table Schema不一致的时候,都需要相应的Mapping关系来映射
注意:用户必须按照Input/Output数据源中的字段顺序来定义TableSchema
withSchema(
new Schema()
.field("id",Types.INT)
.field("id",Types.STRING)
)
除了在创建Table Schema时指定名称和类型之外,支持通过proctime和rowtime等方法获取外部数据中的时间属性,其中proctime方法不需要传参,rowtime需要定义时间字段以及watermark生成逻辑,同时也可以通过使用from方法从数据集中根据名称映射Table Schema字段信息
.withSchema(
new Schema()
.field("Field",Types.INT)
.proctime()
.field("f2",Types.STRING)
.rowtime(...)
.field("f3",Types.STRING)
.from("origin_field_name")
)
如果Table API基于Event Time时间概念处理数据,则需要在接入数据中生成时间时间Rowtime信息,以及Watermark的生成逻辑
.rowtime(
//可以根据字段名称从输入数据中提取
new Rowtime().timestampsFromField("ts_filed")
//或者从底层DataStream API中转换而来,数据源需要支持分配时间戳(如Kafka 0.10X)
new Rowtime().timestampsFromSource()
//或者通过自定义实现timestampsFromSource抽取Rowtime
new Rowtime().timestampsFromExtractor()
紧接在Rowtime() 对象实例后需要指定Watermark策略
.rowtime(
//延时2s生成watermark
new Rowtime().watermarksPeriodicBounded(2000)
//和rowtime最大时间保持一致
new Rowtime().watermarksPeriodicAscending()
//使用底层DataStream API内建Watermark
new Rowtime().watermarksFromSource()
)