flink 维表

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

flink 维表

liujian
请问flink lookup表作为维表,那么lookup表是不是不能新增或者修改,如果修改了那么作业就需要重启?
想要作业不重启咋操作
Reply | Threaded
Open this post in threaded view
|

Re: flink 维表

Leonard Xu
HI,
可以修改的,修改后不需要重启作业。
修改后 flink 事实流 是能立即 查询到 最新的维表数据(前提是维表查询出来的数据没有开启cache)。
你可以理解下 lookup 维表的语法: A join B for system time as of A.proctime on A.id <http://a.id/> = B.id <http://b.id/> 就是 查询当前最新的维表(proctime代表了最新时间)并关联。


祝好,
Leonard

> 在 2021年5月27日,16:35,liujian <[hidden email]> 写道:
>
> 请问flink lookup表作为维表,那么lookup表是不是不能新增或者修改,如果修改了那么作业就需要重启?
> 想要作业不重启咋操作

Reply | Threaded
Open this post in threaded view
|

回复: flink 维表

liujian
Hi:
我看了Leonard分享的视频了,是flink cdc流(订单表), join 时态表(debezium -&gt; kafka), 里面基于eventTime来进行操作的 , 因为我需要使用eventTime&nbsp; lookup表不支持eventTime
1, 这个时态表必须是changlog流吗, 就是&nbsp;debezium -&gt; kafka 这样, 用和主表的flink cdc不可以吗, 我用flink cdc测试没成功,因为flink cdc的维表好像不能指定watermark?
2, 订单表和时态表都需要一直写入数据来触发watermark吗?


烦请解答下


------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
发送时间:&nbsp;2021年5月27日(星期四) 下午5:14
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;Re: flink 维表



HI,
可以修改的,修改后不需要重启作业。
修改后 flink 事实流 是能立即 查询到 最新的维表数据(前提是维表查询出来的数据没有开启cache)。
你可以理解下 lookup 维表的语法: A join B for system time as of A.proctime on A.id <http://a.id/&gt; = B.id <http://b.id/&gt; 就是 查询当前最新的维表(proctime代表了最新时间)并关联。


祝好,
Leonard

&gt; 在 2021年5月27日,16:35,liujian <[hidden email]&gt; 写道:
&gt;
&gt; 请问flink lookup表作为维表,那么lookup表是不是不能新增或者修改,如果修改了那么作业就需要重启?
&gt; 想要作业不重启咋操作
Reply | Threaded
Open this post in threaded view
|

Re: flink 维表

Leonard Xu
Hi


> 1, 这个时态表必须是changlog流吗, 就是&nbsp;debezium -&gt; kafka 这样, 用和主表的flink cdc不可以吗, 我用flink cdc测试没成功,因为flink cdc的维表好像不能指定watermark?

我们常说的 lookup维表也是时态表的一种,lookup 正如这个单词字面意思一样,主流的每条数据到来时都按 lookup key 去外部DB中 查询 一条记录,这张维表自然就是最新的维表,这就是 proctime temporal join 的语义。

基于 Event-time temporal join,是按照 event-time 去取对应的版本, 与 proctime temporal join的区别是, proctime temporal join 只能取最新版本,Evet-time temporal join可以取该 event-time 对应的版本。
Flink 声明 时态表主只需要两个属性, 主键 和 event time, 其中主键甚至可以是推导的。可以看下这个文档【1】

> 2, 订单表和时态表都需要一直写入数据来触发watermark吗?
是的,event-time temporal join 靠两条流的 watermark 来共同驱动。


祝好,
Leonard
【1】https://ci.apache.org/projects/flink/flink-docs-master/zh/docs/dev/table/concepts/versioned_tables/#%e6%97%b6%e6%80%81%e8%a1%a8

>
> 烦请解答下
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
> 发送时间:&nbsp;2021年5月27日(星期四) 下午5:14
> 收件人:&nbsp;"user-zh"<[hidden email]&gt;;
>
> 主题:&nbsp;Re: flink 维表
>
>
>
> HI,
> 可以修改的,修改后不需要重启作业。
> 修改后 flink 事实流 是能立即 查询到 最新的维表数据(前提是维表查询出来的数据没有开启cache)。
> 你可以理解下 lookup 维表的语法: A join B for system time as of A.proctime on A.id <http://a.id/&gt; = B.id <http://b.id/&gt; 就是 查询当前最新的维表(proctime代表了最新时间)并关联。
>
>
> 祝好,
> Leonard
>
> &gt; 在 2021年5月27日,16:35,liujian <[hidden email]&gt; 写道:
> &gt;
> &gt; 请问flink lookup表作为维表,那么lookup表是不是不能新增或者修改,如果修改了那么作业就需要重启?
> &gt; 想要作业不重启咋操作