首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flink SQL :用于连接表的内存不足

Flink SQL :用于连接表的内存不足
EN

Stack Overflow用户
提问于 2018-10-10 22:53:39
回答 1查看 412关注 0票数 0

我有一个经常更新的MySql表。我想为过去20秒内更新的每个id拍摄快照,并将值写入redis。我使用binlog作为流输入,并将数据流转换为Flink表。我运行以下sql。

代码语言:javascript
复制
SELECT id, ts, val
FROM my_tbl
WHERE (id, ts) IN
(
   SELECT id, MAX(ts)
   FROM my_tbl
   GROUP BY TUMBLE(proctime, INTERVAL '20' SECOND), id
)

因为我知道表连接会产生过大的状态大小,所以我将StreamQueryConfig设置如下

代码语言:javascript
复制
qConfig.withIdleStateRetentionTime(Time.seconds(600), Time.seconds(1200));

我运行了一天的任务,得到了out of memory (内存不足)错误。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2018-10-11 03:13:03

您也可以使用时间窗口联接来解决这个问题,而不是使用配置了空闲状态保留时间的常规联接。

下面的查询应该可以做到这一点。

代码语言:javascript
复制
SELECT id, ts, val
FROM my_tbl m1,
     (SELECT id, MAX(ts), TUMBLE_PROCTIME(proctime, INTERVAL '20' SECOND) as ptime
      FROM my_tbl
      GROUP BY TUMBLE(proctime, INTERVAL '20' SECOND), id) m2
WHERE m1.id = m2.id AND m1.ts = m2.ts ANS
      m1.proctime BETWEEN m2.ptime - INTERVAL '25' SECOND AND m2.ptime

窗口连接谓词(BETWEEN)可确保自动清理状态。由于您使用的处理时间不准确,因此我添加了5秒的松弛时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52743050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档