Flink的表API是一种类似SQL的表达式语言,用于关系流和批处理,可以嵌入Flink的Java和Scala数据集和数据流API中。表API和SQL接口在关系表抽象上运行,可以从外部数据源或现有数据流和数据集创建表。表API支持关系运算符,如表上的选择、聚合和连接等。
也可以使用常规SQL查询表。表API提供了和SQL相同的功能,可以在同一程序中混合使用。将表转换回数据集或数据流时,由关系运算符和SQL查询定义的逻辑计划将使用Apache Calcite进行优化,并转换为数据集或数据流程序
使用flinksql完成流式处理任务,具体需求如下。
需求描述:
1)自定义kafka主题,使用flink从kafka中读取原油实时售价数据,注册成表;
数据如下
油品种类 价格 时间
LightCrudeOil 100 2020/11/25 09:00:00
MediumCrudeOil 90 2020/11/25 09:00:00
HeavyCrudeOil 78 2020/11/25 09:00:00
MediumCrudeOil 88 2020/11/25 10:45:00
MediumCrudeOil 89 2020/11/25 11:15:00
HeavyCrudeOil 76 2020/11/25 11:49:00
2)自定义kafka主题,从kafka中读取购买原油订单数据,注册成表;
油品种类 购买数量 时间
MediumCrudeOil 2 2020/11/25 10:15:00
LightCrudeOil 1 2020/11/25 10:30:00
HeavyCrudeOil 5 2020/11/25 10:32:00
MediumCrudeOil 3 2020/11/25 10:52:00
LightCrudeOil 6 2020/11/25 11:04:00
3)将kafka偏移量保存在checkpoint中,使用精确一次消费模式;
4)使用将原油实时售价数据注册成Temporal Table的方式进行计算 ;
5)现在要根据订单下单的时间和实时的单价表使用flinksql实时计算出订单的金额,字段包含油品种类、购买数量、订单金额、购买时间;
(例如10点52分的MediumCrudeOil原油价格要遵从10点45分时的价格而不是9点的价格)
6)使用flinksql实时计算MediumCrudeOil下单次数及其总订单金额&#x