t3zb2xzvjm4yvmn 最近的时间轴更新
t3zb2xzvjm4yvmn

t3zb2xzvjm4yvmn

V2EX 第 627770 号会员,加入于 2023-05-07 19:43:37 +08:00
t3zb2xzvjm4yvmn 最近回复了
274 天前
回复了 villa2935 创建的主题 Python Python 新手之二
dict([(i, j) for i in keys for j in values])
等同于
dict(zip(keys, values))
323 天前
回复了 kerie 创建的主题 问与答 请教一个 Flink SQL 的问题,解决了星巴克感谢
@kerie QnVubnk1NDE=
323 天前
回复了 kerie 创建的主题 问与答 请教一个 Flink SQL 的问题,解决了星巴克感谢
@kerie Flink SQL 好像没有现成的方法,可以自定义 source table ,你研究一下吧
或者不在 Flink 里做,在外部写一个 Java/Python 程序用 JDBC 和 kafka API ,定时把数据推到 kafka ,用 Flink SQL 接 kafka 就比较方便了。
323 天前
回复了 kerie 创建的主题 问与答 请教一个 Flink SQL 的问题,解决了星巴克感谢
实现过类似的需求,首先 lookup join 肯定是不行了,事实流中没有出现的用户肯定关联不到的。

比较彻底的解决方案是使用 datastream API ,process function 。还要状态编程,因为需要将维表的状态自己维护,比如把状态放到一个 tuple2 里,t0 是 customer id ,t1 给默认值 0 ,然后拿另外一个流的 element ,每来一条就给 t1+1 ,窗口触发时把所有的 tuple2 向下游发送。

需要额外考虑的一点是,有可能某个时间窗口内 1 个下单的都没有(比如半夜),那么该窗口无法触发,没有任何输出,所以默认的滚动窗口\事件时间语义就不太行。还需要再实现一个窗口,事件时间、处理时间混合语义,保证即使没有事件仍然可以触发,输出所有用户下单数均为 0 的情况。

Flink SQL 没有实现过,但是有一个简单粗暴的想法,定时把维表的数据全量发到 flink ,构造出所有包含用户的事实流,这样你只需要改造 customers 维表那里就够了。
缺点是需要不断地读维表,对 MySQL 增加压力; source 端不断地向下游发维度信息,实际上不符合事件驱动和流式计算的原则。

我猜测这个需求数据量不大,实时性要求也没那么高,使用 spark streaming 可能是更好的选择。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1176 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 17:40 · PVG 01:40 · LAX 10:40 · JFK 13:40
Developed with CodeLauncher
♥ Do have faith in what you're doing.