V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  t3zb2xzvjm4yvmn  ›  全部回复第 1 页 / 共 1 页
回复总数  10
1 天前
回复了 Zaden 创建的主题 MySQL mysql 如何高效获取两条相邻推送时间间隔
@Zaden 不好意思,前面理解有误,确实要用 lag 窗口函数
1 天前
回复了 Zaden 创建的主题 MySQL mysql 如何高效获取两条相邻推送时间间隔
不能理解 OP 目前的方案,排序+错位自连接?

窗口函数性能更好,而且可以用 point_id+push_time 加索引
max(push_time) - min(push_time) over(partition by point_id) 计算出来时长,再套子查询筛选出超过 24h 的即可
13 天前
回复了 t3zb2xzvjm4yvmn 创建的主题 音乐 [推荐] 河南说唱之神-工厂
@darksheep9527 听了,确实有趣
这首是 21 年创作的吗,如今几年过去了,考公热越演越烈,实在是有趣啊
294 天前
回复了 villa2935 创建的主题 Python Python 新手之二
dict([(i, j) for i in keys for j in values])
等同于
dict(zip(keys, values))
@kerie QnVubnk1NDE=
@kerie Flink SQL 好像没有现成的方法,可以自定义 source table ,你研究一下吧
或者不在 Flink 里做,在外部写一个 Java/Python 程序用 JDBC 和 kafka API ,定时把数据推到 kafka ,用 Flink SQL 接 kafka 就比较方便了。
实现过类似的需求,首先 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   ·   实用小工具   ·   2692 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 13:45 · PVG 21:45 · LAX 06:45 · JFK 09:45
Developed with CodeLauncher
♥ Do have faith in what you're doing.