hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下:
select '2020-03-19' as dt , '2020-03-19 12:05:00' as etltime , count(1) as pv , count(distinct userid) as uv from t_user_log where logintime >= '2020-03-19 00:00:00' and logintime < '2020-03-19 12:05:00' 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? |
Administrator
|
Hi 你可以看下这篇文章是否满足的你需求:
http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql #统计一天每10分钟累计独立用户数 Best, Jark On Thu, 19 Mar 2020 at 23:30, hiliuxg <[hidden email]> wrote: > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > select > '2020-03-19' as dt , > '2020-03-19 12:05:00' as etltime , > count(1) as pv , > count(distinct userid) as uv > from t_user_log > where logintime >= '2020-03-19 00:00:00' and logintime < > '2020-03-19 12:05:00' > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? |
In reply to this post by hiroot
SELECT HOP_START (ts, INTERVAL '3' MINUTE, INTERVAL '24' HOUR),
HOP_END (ts, INTERVAL '3' MINUTE, INTERVAL '24' HOUR), dt, count(1) as pv, count(distinct userid) as uv FROM t_user_log GROUP BY HOP (ts, INTERVAL '5' MINUTE, INTERVAL '24' HOUR), dt 简单粗暴的可以用滑动窗口的SQL,实现。 写代码就比较简单了,自定义实现一下触发器。 hiliuxg <[hidden email]> 于2020年3月19日周四 下午11:30写道: > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > select > '2020-03-19' as dt , > '2020-03-19 12:05:00' as etltime , > count(1) as pv , > count(distinct userid) as uv > from t_user_log > where logintime >= '2020-03-19 00:00:00' and logintime < > '2020-03-19 12:05:00' > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? -- ************************************** tivanli ************************************** |
In reply to this post by Jark
Hi, Jark , 看了你的文章,有一点不是很清楚。
基于 uv_per_10min 再根据分钟时间进行一次聚合,这样每10分钟只有一个点会存储在 Elasticsearch 中,对于 Elasticsearch 和 Kibana 可视化渲染的压力会小很多。 INSERT INTO cumulative_uv SELECT time_str, MAX(uv) FROM uv_per_10min GROUP BY time_str; 怎么实现按分钟聚合?没有明显的窗口设置。有什么内在特性? Jark Wu <[hidden email]> 于2020年3月20日周五 上午12:25写道: > Hi 你可以看下这篇文章是否满足的你需求: > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql > # > <http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql#> > 统计一天每10分钟累计独立用户数 > > Best, > Jark > > > On Thu, 19 Mar 2020 at 23:30, hiliuxg <[hidden email]> wrote: > > > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > > select > > '2020-03-19' as dt , > > '2020-03-19 12:05:00' as etltime , > > count(1) as pv , > > count(distinct userid) as uv > > from t_user_log > > where logintime >= '2020-03-19 00:00:00' and logintime < > > '2020-03-19 12:05:00' > > > > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? > -- ************************************** tivanli ************************************** |
Administrator
|
Hi,
time_str 在前面已经处理过了,处理成了 10:00, 10:10, 10:20... 这种10分钟间隔的点,所以按照 time_str 分组的话,一天下来也就 24*6 个点。 在 Flink SQL 中,并不一定要 GROUP BY TUMLBE 才能做类似窗口聚合的操作,直接 GROUP BY hour/min/ts 也能达到类似的效果。 只不过前者不会输出更新,且能自动清理 state,后者会输出更新且不会自动清理 state。 Best, Jark On Sat, 21 Mar 2020 at 11:24, Tianwang Li <[hidden email]> wrote: > Hi, Jark , 看了你的文章,有一点不是很清楚。 > > 基于 uv_per_10min 再根据分钟时间进行一次聚合,这样每10分钟只有一个点会存储在 Elasticsearch 中,对于 > Elasticsearch 和 Kibana 可视化渲染的压力会小很多。 > > INSERT INTO cumulative_uv > SELECT time_str, MAX(uv) > FROM uv_per_10min > GROUP BY time_str; > > > 怎么实现按分钟聚合?没有明显的窗口设置。有什么内在特性? > > > Jark Wu <[hidden email]> 于2020年3月20日周五 上午12:25写道: > > > Hi 你可以看下这篇文章是否满足的你需求: > > > > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql > > # > > < > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql# > > > > 统计一天每10分钟累计独立用户数 > > > > Best, > > Jark > > > > > > On Thu, 19 Mar 2020 at 23:30, hiliuxg <[hidden email]> wrote: > > > > > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > > > select > > > '2020-03-19' as dt , > > > '2020-03-19 12:05:00' as etltime , > > > count(1) as pv , > > > count(distinct userid) as uv > > > from t_user_log > > > where logintime >= '2020-03-19 00:00:00' and logintime < > > > '2020-03-19 12:05:00' > > > > > > > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? > > > > > -- > ************************************** > tivanli > ************************************** > |
Thanks,
*针对存储点,是你说的那样的。* 我还关注了另外一点,存储的更新频率。 我自己验证了一下, 在视图uv_per_10min,上的group by 聚合,因为求的UV,在max值不变的时,不会输出更新ES。 *这里如果是PV,更新ES的频率还是很高的。* INSERT INTO cumulative_uv SELECT time_str, MAX(uv) FROM uv_per_10min GROUP BY time_str; Jark Wu <[hidden email]> 于2020年3月22日周日 上午10:52写道: > Hi, > > time_str 在前面已经处理过了,处理成了 10:00, 10:10, 10:20... 这种10分钟间隔的点,所以按照 time_str > 分组的话,一天下来也就 24*6 个点。 > 在 Flink SQL 中,并不一定要 GROUP BY TUMLBE 才能做类似窗口聚合的操作,直接 GROUP BY hour/min/ts > 也能达到类似的效果。 > 只不过前者不会输出更新,且能自动清理 state,后者会输出更新且不会自动清理 state。 > > Best, > Jark > > On Sat, 21 Mar 2020 at 11:24, Tianwang Li <[hidden email]> wrote: > > > Hi, Jark , 看了你的文章,有一点不是很清楚。 > > > > 基于 uv_per_10min 再根据分钟时间进行一次聚合,这样每10分钟只有一个点会存储在 Elasticsearch 中,对于 > > Elasticsearch 和 Kibana 可视化渲染的压力会小很多。 > > > > INSERT INTO cumulative_uv > > SELECT time_str, MAX(uv) > > FROM uv_per_10min > > GROUP BY time_str; > > > > > > 怎么实现按分钟聚合?没有明显的窗口设置。有什么内在特性? > > > > > > Jark Wu <[hidden email]> 于2020年3月20日周五 上午12:25写道: > > > > > Hi 你可以看下这篇文章是否满足的你需求: > > > > > > > > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql > > > # > > > < > > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql# > > > > > > 统计一天每10分钟累计独立用户数 > > > > > > Best, > > > Jark > > > > > > > > > On Thu, 19 Mar 2020 at 23:30, hiliuxg <[hidden email]> wrote: > > > > > > > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > > > > select > > > > '2020-03-19' as dt , > > > > '2020-03-19 12:05:00' as etltime , > > > > count(1) as pv , > > > > count(distinct userid) as uv > > > > from t_user_log > > > > where logintime >= '2020-03-19 00:00:00' and > logintime < > > > > '2020-03-19 12:05:00' > > > > > > > > > > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? > > > > > > > > > -- > > ************************************** > > tivanli > > ************************************** > > > -- ************************************** tivanli ************************************** |
Administrator
|
如果更新频率很高的话,可以开启 minibatch [1][2],减少输出量。
Best, Jark [1]: https://ci.apache.org/projects/flink/flink-docs-master/dev/table/config.html [2]: https://ci.apache.org/projects/flink/flink-docs-master/dev/table/tuning/streaming_aggregation_optimization.html#minibatch-aggregation On Sun, 22 Mar 2020 at 13:15, Tianwang Li <[hidden email]> wrote: > Thanks, > > *针对存储点,是你说的那样的。* > > 我还关注了另外一点,存储的更新频率。 > 我自己验证了一下, > 在视图uv_per_10min,上的group by 聚合,因为求的UV,在max值不变的时,不会输出更新ES。 > *这里如果是PV,更新ES的频率还是很高的。* > > INSERT INTO cumulative_uv > SELECT time_str, MAX(uv) > FROM uv_per_10min > GROUP BY time_str; > > > > > > Jark Wu <[hidden email]> 于2020年3月22日周日 上午10:52写道: > > > Hi, > > > > time_str 在前面已经处理过了,处理成了 10:00, 10:10, 10:20... 这种10分钟间隔的点,所以按照 time_str > > 分组的话,一天下来也就 24*6 个点。 > > 在 Flink SQL 中,并不一定要 GROUP BY TUMLBE 才能做类似窗口聚合的操作,直接 GROUP BY hour/min/ts > > 也能达到类似的效果。 > > 只不过前者不会输出更新,且能自动清理 state,后者会输出更新且不会自动清理 state。 > > > > Best, > > Jark > > > > On Sat, 21 Mar 2020 at 11:24, Tianwang Li <[hidden email]> wrote: > > > > > Hi, Jark , 看了你的文章,有一点不是很清楚。 > > > > > > 基于 uv_per_10min 再根据分钟时间进行一次聚合,这样每10分钟只有一个点会存储在 Elasticsearch 中,对于 > > > Elasticsearch 和 Kibana 可视化渲染的压力会小很多。 > > > > > > INSERT INTO cumulative_uv > > > SELECT time_str, MAX(uv) > > > FROM uv_per_10min > > > GROUP BY time_str; > > > > > > > > > 怎么实现按分钟聚合?没有明显的窗口设置。有什么内在特性? > > > > > > > > > Jark Wu <[hidden email]> 于2020年3月20日周五 上午12:25写道: > > > > > > > Hi 你可以看下这篇文章是否满足的你需求: > > > > > > > > > > > > > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql > > > > # > > > > < > > > > > > http://wuchong.me/blog/2020/02/25/demo-building-real-time-application-with-flink-sql# > > > > > > > > 统计一天每10分钟累计独立用户数 > > > > > > > > Best, > > > > Jark > > > > > > > > > > > > On Thu, 19 Mar 2020 at 23:30, hiliuxg <[hidden email]> wrote: > > > > > > > > > hi all:有这样子一个场景,我想通过每隔5分钟统计当日零点到当前5分钟的pv和uv,用批处理大概大概表达如下: > > > > > select > > > > > '2020-03-19' as dt , > > > > > '2020-03-19 12:05:00' as etltime , > > > > > count(1) as pv , > > > > > count(distinct userid) as uv > > > > > from t_user_log > > > > > where logintime >= '2020-03-19 00:00:00' and > > logintime < > > > > > '2020-03-19 12:05:00' > > > > > > > > > > > > > > > 这里,没法用flink sql 处理,当时这种场景又特别多,各位大神有好的方案处理吗? > > > > > > > > > > > > > -- > > > ************************************** > > > tivanli > > > ************************************** > > > > > > > > -- > ************************************** > tivanli > ************************************** > |
Free forum by Nabble | Edit this page |