Flink实时电商数仓(五)

FlinkSQL的join

  1. Regular join普通join,两条流的数据都时存放在内存的状态中,如果两条流数据都很大,对内存压力很大。
  2. Interval Join: 适合两条流到达时间有先后关系的;一条流的存活时间短,一条流的存活时间长。
  3. 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超时时间

交易域下单事务事实表

Flink实时电商数仓(五)_第1张图片

  1. 交易事务关联的表总共有四个表
    • order_detail
    • order_info
    • order_detail_activity
    • order_detail_coupon
  2. 设置ttl状态生存时间,设置网络波动延迟时间为5s
  3. 关联四张表获取到订单明细表,order_detail和order_info使用内连接即可,活动和优惠券表使用left join即可。
  4. 核心业务编写
    • 读取topic_db数据
    • 筛选订单详情order_detail表数据
    • 筛选订单信息表order_info
    • 筛选订单详情活动关联表
    • 筛选订单详情优惠券关联表
    • 将四张表join合并
    • 写出到kafka中:一旦使用了left join,会产生撤回流,此时如果需要将数据写出到kafka,不能使用kafka连接器,必须使用upsert kafka连接器。
      • upsert kafka必须声明主键

你可能感兴趣的:(flink,大数据)