(无主题)

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

(无主题)

superainbower
hi,社区的小伙伴,大家好!我有一个应用场景,想请教下大家有没有遇过,有什么好的方案。
场景就是:按照user和day的维度统计订单表里的有效订单数,同时存在历史的订单状态随时可能被更新,比如可能当前把2个月前的订单状态置未true,所以没法根据历史结果预统计,翻译称sql就是select user,day,count(*) from table where state = true group by user,day;目前我已经用flink-sql-cdc-connector实现了,但是有一个问题就是state,因为按user day组合 那么如果全部状态都保存后期回越来越大,但是如果设置ttl,那么如果历史订单变化,最终更新出去的值也不对。
希望社区的小伙伴给我出出主意
Reply | Threaded
Open this post in threaded view
|

回复:(无主题)

zhiyezou
HI 


这个day应该是订单的创建时间吧


我觉得我们遇到的问题有些类似,看下我们的方案对你是否有所帮助。


首先,我们会把day这个条件控制在3天(select * where day >now-3),状态的TTL也是3天,即flink保留3天的状态,这样即使有3天前的数据到来也不会更新我们的结果表;这样可以解决更新错误的问题。


然后,通过离线任务来定时修正3天前的结果数据。这样可以保证数据的最终一致性






------------------ 原始邮件 ------------------
发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
发送时间:&nbsp;2020年8月17日(星期一) 中午12:32
收件人:&nbsp;"[hidden email]"<[hidden email]&gt;;

主题:&nbsp;(无主题)



hi,社区的小伙伴,大家好!我有一个应用场景,想请教下大家有没有遇过,有什么好的方案。
场景就是:按照user和day的维度统计订单表里的有效订单数,同时存在历史的订单状态随时可能被更新,比如可能当前把2个月前的订单状态置未true,所以没法根据历史结果预统计,翻译称sql就是select user,day,count(*) from table where state = true group by user,day;目前我已经用flink-sql-cdc-connector实现了,但是有一个问题就是state,因为按user day组合 那么如果全部状态都保存后期回越来越大,但是如果设置ttl,那么如果历史订单变化,最终更新出去的值也不对。
希望社区的小伙伴给我出出主意
Reply | Threaded
Open this post in threaded view
|

Re: (无主题)

superainbower
hi,感谢提供的方案

是的,day是订单的创建时间

想请教下,你们的离线任务是每次都将全量订单数据一起修正吗,就是不管历史的有没有变化 都去作修正,

要是这样那会不会出现绝大部分情况,离线跑的任务都是无效的,因为历史数据未发生变化

> 在 2020年8月17日,下午1:22,zhiyezou <[hidden email]> 写道:
>
> HI&nbsp;
>
>
> 这个day应该是订单的创建时间吧
>
>
> 我觉得我们遇到的问题有些类似,看下我们的方案对你是否有所帮助。
>
>
> 首先,我们会把day这个条件控制在3天(select * where day &gt;now-3),状态的TTL也是3天,即flink保留3天的状态,这样即使有3天前的数据到来也不会更新我们的结果表;这样可以解决更新错误的问题。
>
>
> 然后,通过离线任务来定时修正3天前的结果数据。这样可以保证数据的最终一致性
>
>
>
>
>
>
> ------------------&nbsp;原始邮件&nbsp;------------------
> 发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
> 发送时间:&nbsp;2020年8月17日(星期一) 中午12:32
> 收件人:&nbsp;"[hidden email]"<[hidden email]&gt;;
>
> 主题:&nbsp;(无主题)
>
>
>
> hi,社区的小伙伴,大家好!我有一个应用场景,想请教下大家有没有遇过,有什么好的方案。
> 场景就是:按照user和day的维度统计订单表里的有效订单数,同时存在历史的订单状态随时可能被更新,比如可能当前把2个月前的订单状态置未true,所以没法根据历史结果预统计,翻译称sql就是select user,day,count(*) from table where state = true group by user,day;目前我已经用flink-sql-cdc-connector实现了,但是有一个问题就是state,因为按user day组合 那么如果全部状态都保存后期回越来越大,但是如果设置ttl,那么如果历史订单变化,最终更新出去的值也不对。
> 希望社区的小伙伴给我出出主意

Reply | Threaded
Open this post in threaded view
|

回复: (无主题)

zhiyezou
Hi


先说下我们这边的情况,只有1%以下数据的更新时间会超过三天,但最大不会超过两周。所以我们只会更新最近两周的统计结果。


我理解你这边的场景是更新时间不确定。
如果需求方对数据误差零容忍,那估计得更新全量数据;否则可以根据历史数据的更新情况来统计出误差,进而灵活控制需要更新的数据量。










------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <[hidden email]&gt;;
发送时间:&nbsp;2020年8月17日(星期一) 下午2:09
收件人:&nbsp;"user-zh"<[hidden email]&gt;;

主题:&nbsp;Re: (无主题)



hi,感谢提供的方案

是的,day是订单的创建时间

想请教下,你们的离线任务是每次都将全量订单数据一起修正吗,就是不管历史的有没有变化 都去作修正,

要是这样那会不会出现绝大部分情况,离线跑的任务都是无效的,因为历史数据未发生变化

&gt; 在 2020年8月17日,下午1:22,zhiyezou <[hidden email]&gt; 写道:
&gt;
&gt; HI&amp;nbsp;
&gt;
&gt;
&gt; 这个day应该是订单的创建时间吧
&gt;
&gt;
&gt; 我觉得我们遇到的问题有些类似,看下我们的方案对你是否有所帮助。
&gt;
&gt;
&gt; 首先,我们会把day这个条件控制在3天(select * where day &amp;gt;now-3),状态的TTL也是3天,即flink保留3天的状态,这样即使有3天前的数据到来也不会更新我们的结果表;这样可以解决更新错误的问题。
&gt;
&gt;
&gt; 然后,通过离线任务来定时修正3天前的结果数据。这样可以保证数据的最终一致性
&gt;
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------
&gt; 发件人:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "user-zh"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <[hidden email]&amp;gt;;
&gt; 发送时间:&amp;nbsp;2020年8月17日(星期一) 中午12:32
&gt; 收件人:&amp;nbsp;"[hidden email]"<[hidden email]&amp;gt;;
&gt;
&gt; 主题:&amp;nbsp;(无主题)
&gt;
&gt;
&gt;
&gt; hi,社区的小伙伴,大家好!我有一个应用场景,想请教下大家有没有遇过,有什么好的方案。
&gt; 场景就是:按照user和day的维度统计订单表里的有效订单数,同时存在历史的订单状态随时可能被更新,比如可能当前把2个月前的订单状态置未true,所以没法根据历史结果预统计,翻译称sql就是select user,day,count(*) from table where state = true group by user,day;目前我已经用flink-sql-cdc-connector实现了,但是有一个问题就是state,因为按user day组合 那么如果全部状态都保存后期回越来越大,但是如果设置ttl,那么如果历史订单变化,最终更新出去的值也不对。
&gt; 希望社区的小伙伴给我出出主意