(四)flink的Table API 与 SQL-Table Schema

文章目录


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()
)
发布了483 篇原创文章 · 获赞 62 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/103774382