我理解楼主的场景不是 temporal join 的场景,而是双流 join
的场景,因为任何一条流的变化,都希望触发对结果的更新,所以讲员工作为右边维度表是不行的。

如果是我理解的这样的话,你可以用 flink-cdc-connectors [1] 去对接员工和订单两个 binlog 流,然后直接
join,然后聚合订单数。伪代码如下:

create table users (
  user_id bigint,
  ...
) with (
  connector = mysql-cdc
  ...
);

create table orders (
  order_id bigint,
  user_id bigint,
  ...
) with (
  connector = mysql-cdc
  ...
);

select user_id, count(*) as order_num
from (select * from users left join orders on users.user_id =
orders.user_id)
group by user_id;


[1]: https://github.com/ververica/flink-cdc-connectors

On Mon, 12 Oct 2020 at 15:17, caozhen <caozhen1...@163.com> wrote:

>
> 我理解这个场景下  员工维表在右边没啥问题。
>
> join过程中需要去员工维表拿哪些字段?
>
>
>
> 夜思流年梦 wrote
> > 现在有一个场景: 一个员工维表,一个订单表(监听mysql binlog的一个流表),想实时计算出所有员工的订单数;
> > 目前flink-sql 支持Join Temporal Tables  ,但是官方文档上是这么说的:仅支持带有处理时间的 temporal
> > tables 的 inner 和 left join。
> > 而这个场景必须是维表在左边,但实际情况是维表在左边无法进行left join :会报错:ClassCastException:
> > org.apache.calcite.rel.logical.LogicalProject cannot be cast to
> > org.apache.calcite.rel.core.TableScan;(如果是流表在左边,然后用temporal join
> > 一个维表那么没有问题,即:left join 维表 FOR SYSTEM_TIME AS OF proctime)
> > 想问下各位,碰到这类情况,大家是怎么处理的
>
>
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/

Reply via email to