FlinkSQL的join
- Regular join普通join,两条流的数据都时存放在内存的状态中,如果两条流数据都很大,对内存压力很大。
- Interval Join: 适合两条流到达时间有先后关系的;一条流的存活时间短,一条流的存活时间长。
- Lookup Join:适合主流特别大,从流特别小的情况;主流数据没到达一条,就会去查询从流的每一条数据。主流数据不存储在内存中。
- 语法:主流使用时必须有处理时间,
proctime as PROCTIME()
- 在从流表名和别名之间添加
FOR SYSTEM_TIME AS OF c.proc_time
- 参数位置,官网->application Development -> Table API & SQL -> Configuration, 在该网页搜索lookup即可查询到相应参数配置,比如:
- table.exec.async-lookup.buffer-capacity: 缓冲队列的大小
- table.exec.async-lookup.output-mode:数据输出的模式,是否有序
- table.exec.async-lookup.timeout:lookup超时时间
- 语法:主流使用时必须有处理时间,
交易域下单事务事实表
- 交易事务关联的表总共有四个表
- order_detail
- order_info
- order_detail_activity
- order_detail_coupon
- 设置ttl状态生存时间,设置网络波动延迟时间为5s
- 关联四张表获取到订单明细表,order_detail和order_info使用内连接即可,活动和优惠券表使用left join即可。
- 核心业务编写
- 读取topic_db数据
- 筛选订单详情order_detail表数据
- 筛选订单信息表order_info
- 筛选订单详情活动关联表
- 筛选订单详情优惠券关联表
- 将四张表join合并
- 写出到kafka中:一旦使用了left join,会产生撤回流,此时如果需要将数据写出到kafka,不能使用kafka连接器,必须使用upsert kafka连接器。
- upsert kafka必须声明主键