首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flink-sql如何处理像“count(Distinct)”这样的场景?

flink-sql如何处理像“count(Distinct)”这样的场景?
EN

Stack Overflow用户
提问于 2020-09-14 15:00:10
回答 2查看 230关注 0票数 0

我需要使用flink-sql实时计算“每日活跃用户”,这就像是对每日数据的“count(distinct )”操作。

我的问题是,如果userA像预期的那样在凌晨1点登录,并且flink将DAU加1。现在,userA在晚上10点再次登录,flink-sql怎么知道今天早上userA已经被处理了?是否需要对全天的登录日志重复做count(distinct )?如果不是,flink如何处理这个senario?

EN

回答 2

Stack Overflow用户

发布于 2020-09-14 15:54:46

Distinct在流媒体中是一个非常昂贵的操作。如果您不使用基于时间的窗口(TUMBLESLIDESESSION),则运行时必须将所有值永久存储在状态中,因为它需要假设另一条记录可能在将来的任何时候到达。

但是,您可以设置选项table.exec.state.ttl (see here)使这些记录保持状态的时间。在设计具有长时间运行的查询的SQL管道时,这可能是最重要的选项之一,其中操作符输入的值空间不是恒定的。

票数 2
EN

Stack Overflow用户

发布于 2020-09-14 15:55:36

所谓实时,我假设你是指在连续查询中?

请参阅https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/tuning/streaming_aggregation_optimization.html

默认情况下,无界聚合运算符逐个处理输入记录,即(1)从状态读取累加器,(2)将记录累加/收回到累加器,(3)将累加器写回状态,(4)下一条记录将从(1)再次执行该过程。

累加器不仅保存最终结果,而且还保留足够的数据来生成下一个结果,而无需再次读取所有先前的记录。

我猜在count(distinct)的情况下,它意味着每天在累加器中保留所有唯一的用户。

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

https://stackoverflow.com/questions/63879476

复制
相关文章

相似问题

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