retract的问题

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

retract的问题

lec ssmi
Hi:
   有几个问题想咨询下大佬:
  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
  3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
Hi lec,

 1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?

这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late fire的时候。
还有些算子本身不会产生,但是会传递,比如calc算子

 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。

这个也不绝对。大部分时候是。
这个取决于这个算子本身是不是会consume retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。

 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?

是的。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:

> Hi:
>    有几个问题想咨询下大佬:
>   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
>   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
>   3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。


Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:

> Hi lec,
>
>  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
>
> 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late fire的时候。
> 还有些算子本身不会产生,但是会传递,比如calc算子
>
>  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
>
> 这个也不绝对。大部分时候是。
> 这个取决于这个算子本身是不是会consume
> retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
>
>  3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
>
> 是的。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
>
> > Hi:
> >    有几个问题想咨询下大佬:
> >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> >   3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:

> 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
>
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
>
> > Hi lec,
> >
> >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> >
> > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late fire的时候。
> > 还有些算子本身不会产生,但是会传递,比如calc算子
> >
> >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> >
> > 这个也不绝对。大部分时候是。
> > 这个取决于这个算子本身是不是会consume
> > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> >
> >  3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> >
> > 是的。
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> >
> > > Hi:
> > >    有几个问题想咨询下大佬:
> > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > >
>  3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
谢谢。
其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
但是对于Table
API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
for  datastream bounded over aggregate  。 是否说只有over window的时候才有retract?
另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:

> 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
>
> > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> >
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> >
> > > Hi lec,
> > >
> > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > >
> > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late fire的时候。
> > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > >
> > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > >
> > > 这个也不绝对。大部分时候是。
> > > 这个取决于这个算子本身是不是会consume
> > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > >
> > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > >
> > > 是的。
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > >
> > > > Hi:
> > > >    有几个问题想咨询下大佬:
> > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > >
> >  3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
内置的*聚合函数*应该是都能处理retract消息的。
普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over window的确是会需要处理retract,除此之外,regular
group by也需要。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:

> 谢谢。
> 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> 但是对于Table
> API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
> for  datastream bounded over aggregate  。 是否说只有over window的时候才有retract?
>
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
>
> > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> >
> > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > >
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > >
> > > > Hi lec,
> > > >
> > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > >
> > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late
> fire的时候。
> > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > >
> > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > >
> > > > 这个也不绝对。大部分时候是。
> > > > 这个取决于这个算子本身是不是会consume
> > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > >
> > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > >
> > > > 是的。
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > >
> > > > > Hi:
> > > > >    有几个问题想咨询下大佬:
> > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > >
> > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
那如果是两个retract算子后的流进行time interval join,
已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?

Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:

> 内置的*聚合函数*应该是都能处理retract消息的。
> 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over window的确是会需要处理retract,除此之外,regular
> group by也需要。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
>
> > 谢谢。
> > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > 但是对于Table
> > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
> > for  datastream bounded over aggregate  。 是否说只有over window的时候才有retract?
> >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> >
> > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > >
> > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > >
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > >
> > > > > Hi lec,
> > > > >
> > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > >
> > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late
> > fire的时候。
> > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > >
> > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > >
> > > > > 这个也不绝对。大部分时候是。
> > > > > 这个取决于这个算子本身是不是会consume
> > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > >
> > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > >
> > > > > 是的。
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > >
> > > > > > Hi:
> > > > > >    有几个问题想咨询下大佬:
> > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > >
> > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Leonard Xu
In reply to this post by lec ssmi
Hi

> 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。

现在确实缺少这方面的文档,简单的办法可以看下这个类org.apache.flink.table.plan.nodes.datastream.DataStreamRel

如果需要了解可以看下都有哪些算子实现这些方法即可
def needsUpdatesAsRetraction: Boolean = false
def producesUpdates: Boolean = false
def consumesRetractions: Boolean = false
def producesRetractions: Boolean = false

祝好,
Leonard Xu

Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
In reply to this post by lec ssmi
time interval join不允许输入是非append的。


lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:

> 那如果是两个retract算子后的流进行time interval join,
> 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
>
> > 内置的*聚合函数*应该是都能处理retract消息的。
> > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> window的确是会需要处理retract,除此之外,regular
> > group by也需要。
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> >
> > > 谢谢。
> > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > 但是对于Table
> > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
> > > for  datastream bounded over aggregate  。 是否说只有over window的时候才有retract?
> > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > >
> > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > >
> > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > >
> > > > >
> > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > >
> > > > > > Hi lec,
> > > > > >
> > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > >
> > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late
> > > fire的时候。
> > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > >
> > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > >
> > > > > > 这个也不绝对。大部分时候是。
> > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > >
> > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > >
> > > > > > 是的。
> > > > > >
> > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > > >
> > > > > > > Hi:
> > > > > > >    有几个问题想咨询下大佬:
> > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > >
> > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Benchao Li
> > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > University
> > > > > > Tel:+86-15650713730
> > > > > > Email: [hidden email]; [hidden email]
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
window做的,然后再做的join,然后将join的结果进行tumble window 聚合。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:

> time interval join不允许输入是非append的。
>
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
>
> > 那如果是两个retract算子后的流进行time interval join,
> > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> >
> > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > window的确是会需要处理retract,除此之外,regular
> > > group by也需要。
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > >
> > > > 谢谢。
> > > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > 但是对于Table
> > > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
> > > > for  datastream bounded over aggregate  。 是否说只有over
> window的时候才有retract?
> > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > >
> > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > >
> > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > >
> > > > > >
> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > >
> > > > > > > Hi lec,
> > > > > > >
> > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > >
> > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early fire或者late
> > > > fire的时候。
> > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > >
> > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > >
> > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > >
> > > > > > >
> > > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > >
> > > > > > > 是的。
> > > > > > >
> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > > > >
> > > > > > > > Hi:
> > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > >
> > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: [hidden email]; [hidden email]
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:

> 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
>
> > time interval join不允许输入是非append的。
> >
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> >
> > > 那如果是两个retract算子后的流进行time interval join,
> > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > >
> > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > window的确是会需要处理retract,除此之外,regular
> > > > group by也需要。
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > >
> > > > > 谢谢。
> > > > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > 但是对于Table
> > > > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be implemented
> > > > > for  datastream bounded over aggregate  。 是否说只有over
> > window的时候才有retract?
> > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > >
> > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > >
> > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > >
> > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > > >
> > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > >
> > > > > > >
> > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > > >
> > > > > > > > Hi lec,
> > > > > > > >
> > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > >
> > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> fire或者late
> > > > > fire的时候。
> > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > >
> > > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > >
> > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > >
> > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > >
> > > > > > > > 是的。
> > > > > > > >
> > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > > > > >
> > > > > > > > > Hi:
> > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > >
> > > > > > >
> > > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > >
> > > > > > > > Benchao Li
> > > > > > > > School of Electronics Engineering and Computer Science,
> Peking
> > > > > > University
> > > > > > > > Tel:+86-15650713730
> > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Benchao Li
> > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > University
> > > > > > Tel:+86-15650713730
> > > > > > Email: [hidden email]; [hidden email]
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Jingsong Li
可以建个JIRA来更新文档吗?现在retract的文档的确有点confuse

Best,
Jingsong Lee

On Thu, Apr 23, 2020 at 4:33 PM Benchao Li <[hidden email]> wrote:

> 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
>
> > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> >
> > > time interval join不允许输入是非append的。
> > >
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > >
> > > > 那如果是两个retract算子后的流进行time interval join,
> > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > >
> > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > window的确是会需要处理retract,除此之外,regular
> > > > > group by也需要。
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > >
> > > > > > 谢谢。
> > > > > >
> 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > 但是对于Table
> > > > > >
> API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> implemented
> > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > window的时候才有retract?
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > >
> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > >
> > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > >
> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > > > >
> > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > >
> > > > > > > >
> > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > > > >
> > > > > > > > > Hi lec,
> > > > > > > > >
> > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > >
> > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > fire或者late
> > > > > > fire的时候。
> > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > >
> > > > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > >
> > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > >
> > > > > > > > > 是的。
> > > > > > > > >
> > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > > > > > >
> > > > > > > > > > Hi:
> > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > >
> > > > > > > > > Benchao Li
> > > > > > > > > School of Electronics Engineering and Computer Science,
> > Peking
> > > > > > > University
> > > > > > > > > Tel:+86-15650713730
> > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: [hidden email]; [hidden email]
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>


--
Best, Jingsong Lee
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
In reply to this post by Benchao Li
其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
     if( type='DELETE'){
         sum=sum-value
    } else if(type='INSERT'){
        sum=sum+value
   }
 的逻辑呢?
 但是在ScalarFunction中,只实现了eval方法,也就是只有 INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:

> 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
>
> > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> >
> > > time interval join不允许输入是非append的。
> > >
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > >
> > > > 那如果是两个retract算子后的流进行time interval join,
> > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > >
> > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > window的确是会需要处理retract,除此之外,regular
> > > > > group by也需要。
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > >
> > > > > > 谢谢。
> > > > > >
> 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > 但是对于Table
> > > > > >
> API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> implemented
> > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > window的时候才有retract?
> > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > >
> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > >
> > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > >
> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > > > >
> > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > >
> > > > > > > >
> > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > > > >
> > > > > > > > > Hi lec,
> > > > > > > > >
> > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > >
> > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > fire或者late
> > > > > > fire的时候。
> > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > >
> > > > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > >
> > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > >
> > > > > > > > > 是的。
> > > > > > > > >
> > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:25写道:
> > > > > > > > >
> > > > > > > > > > Hi:
> > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > >   2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > >
> > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > >
> > > > > > > > > Benchao Li
> > > > > > > > > School of Electronics Engineering and Computer Science,
> > Peking
> > > > > > > University
> > > > > > > > > Tel:+86-15650713730
> > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: [hidden email]; [hidden email]
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
Hi Jingsong,
我建了一个jira[1] 来跟踪这个事情。

Hi lec,
sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
scalar function不需要这样子处理,因为它本身没有状态。scalar function对于消息的类型是不需要判断的,处理过程都是一样的。

[1] https://issues.apache.org/jira/browse/FLINK-17343

lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:

> 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
> 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
>      if( type='DELETE'){
>          sum=sum-value
>     } else if(type='INSERT'){
>         sum=sum+value
>    }
>  的逻辑呢?
>  但是在ScalarFunction中,只实现了eval方法,也就是只有 INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
>
> > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
> >
> > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> > >
> > > > time interval join不允许输入是非append的。
> > > >
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > > >
> > > > > 那如果是两个retract算子后的流进行time interval join,
> > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > > >
> > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > > >
> > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > > window的确是会需要处理retract,除此之外,regular
> > > > > > group by也需要。
> > > > > >
> > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > > >
> > > > > > > 谢谢。
> > > > > > >
> > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > > 但是对于Table
> > > > > > >
> > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> > implemented
> > > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > > window的时候才有retract?
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > > >
> > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > > >
> > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > > >
> > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > > > > >
> > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > > > > >
> > > > > > > > > > Hi lec,
> > > > > > > > > >
> > > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > >
> > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > > fire或者late
> > > > > > > fire的时候。
> > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > > >
> > > > > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > >
> > > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > >
> > > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > >
> > > > > > > > > > 是的。
> > > > > > > > > >
> > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> 下午3:25写道:
> > > > > > > > > >
> > > > > > > > > > > Hi:
> > > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > >
>  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > >
> > > > > > > > > > Benchao Li
> > > > > > > > > > School of Electronics Engineering and Computer Science,
> > > Peking
> > > > > > > > University
> > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > >
> > > > > > > > Benchao Li
> > > > > > > > School of Electronics Engineering and Computer Science,
> Peking
> > > > > > University
> > > > > > > > Tel:+86-15650713730
> > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Benchao Li
> > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > University
> > > > > > Tel:+86-15650713730
> > > > > > Email: [hidden email]; [hidden email]
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
那也就是说UDF这种ScalarFunction,是没有办法处理Retract的了?因为它把DELETE记录和INSERT记录都做了相同的操作。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:54写道:

> Hi Jingsong,
> 我建了一个jira[1] 来跟踪这个事情。
>
> Hi lec,
> sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
> scalar function不需要这样子处理,因为它本身没有状态。scalar function对于消息的类型是不需要判断的,处理过程都是一样的。
>
> [1] https://issues.apache.org/jira/browse/FLINK-17343
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:
>
> > 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
> > 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
> >      if( type='DELETE'){
> >          sum=sum-value
> >     } else if(type='INSERT'){
> >         sum=sum+value
> >    }
> >  的逻辑呢?
> >  但是在ScalarFunction中,只实现了eval方法,也就是只有 INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
> >
> > > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
> > >
> > > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> > > >
> > > > > time interval join不允许输入是非append的。
> > > > >
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > > > >
> > > > > > 那如果是两个retract算子后的流进行time interval join,
> > > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > > > >
> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > > > >
> > > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > > > window的确是会需要处理retract,除此之外,regular
> > > > > > > group by也需要。
> > > > > > >
> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > > > >
> > > > > > > > 谢谢。
> > > > > > > >
> > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > > > 但是对于Table
> > > > > > > >
> > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> > > implemented
> > > > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > > > window的时候才有retract?
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > > > >
> > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > > > >
> > > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > > > >
> > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午3:45写道:
> > > > > > > > >
> > > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:39写道:
> > > > > > > > > >
> > > > > > > > > > > Hi lec,
> > > > > > > > > > >
> > > > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > >
> > > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > > > fire或者late
> > > > > > > > fire的时候。
> > > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > > > >
> > > > > > > > > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > >
> > > > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > >
> > > > > > > > > > > 是的。
> > > > > > > > > > >
> > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> > 下午3:25写道:
> > > > > > > > > > >
> > > > > > > > > > > > Hi:
> > > > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > > > >   1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > >
> >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > > >
> > > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > >
> > > > > > > > > > > Benchao Li
> > > > > > > > > > > School of Electronics Engineering and Computer Science,
> > > > Peking
> > > > > > > > > University
> > > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > >
> > > > > > > > > Benchao Li
> > > > > > > > > School of Electronics Engineering and Computer Science,
> > Peking
> > > > > > > University
> > > > > > > > > Tel:+86-15650713730
> > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: [hidden email]; [hidden email]
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
不是这个意思。是说scalar function不需要额外处理,所以它一套逻辑就可以处理两种类型的消息了。
它不需要区分消息类型,只需要处理消息本身(消息类型是在header里)。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:00写道:

> 那也就是说UDF这种ScalarFunction,是没有办法处理Retract的了?因为它把DELETE记录和INSERT记录都做了相同的操作。
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:54写道:
>
> > Hi Jingsong,
> > 我建了一个jira[1] 来跟踪这个事情。
> >
> > Hi lec,
> > sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
> > scalar function不需要这样子处理,因为它本身没有状态。scalar
> function对于消息的类型是不需要判断的,处理过程都是一样的。
> >
> > [1] https://issues.apache.org/jira/browse/FLINK-17343
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:
> >
> > > 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
> > > 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
> > >      if( type='DELETE'){
> > >          sum=sum-value
> > >     } else if(type='INSERT'){
> > >         sum=sum+value
> > >    }
> > >  的逻辑呢?
> > >  但是在ScalarFunction中,只实现了eval方法,也就是只有 INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
> > >
> > > > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
> > > >
> > > > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > > > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> > > > >
> > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> > > > >
> > > > > > time interval join不允许输入是非append的。
> > > > > >
> > > > > >
> > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > > > > >
> > > > > > > 那如果是两个retract算子后的流进行time interval join,
> > > > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > > > > >
> > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > > > > >
> > > > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > > > > window的确是会需要处理retract,除此之外,regular
> > > > > > > > group by也需要。
> > > > > > > >
> > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > > > > >
> > > > > > > > > 谢谢。
> > > > > > > > >
> > > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > > > > 但是对于Table
> > > > > > > > >
> > > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> > > > implemented
> > > > > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > > > > window的时候才有retract?
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > > > > >
> > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > > > > >
> > > > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > > > > >
> > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> 下午3:45写道:
> > > > > > > > > >
> > > > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四
> 下午3:39写道:
> > > > > > > > > > >
> > > > > > > > > > > > Hi lec,
> > > > > > > > > > > >
> > > > > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > >
> > > > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > > > > fire或者late
> > > > > > > > > fire的时候。
> > > > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > > > > >
> > > > > > > > > > > >
> 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > >
> > > > > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > >
> > > > > > > > > > > > 是的。
> > > > > > > > > > > >
> > > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> > > 下午3:25写道:
> > > > > > > > > > > >
> > > > > > > > > > > > > Hi:
> > > > > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > > > > >
>  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > > >
> > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > --
> > > > > > > > > > > >
> > > > > > > > > > > > Benchao Li
> > > > > > > > > > > > School of Electronics Engineering and Computer
> Science,
> > > > > Peking
> > > > > > > > > > University
> > > > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > >
> > > > > > > > > > Benchao Li
> > > > > > > > > > School of Electronics Engineering and Computer Science,
> > > Peking
> > > > > > > > University
> > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > >
> > > > > > > > Benchao Li
> > > > > > > > School of Electronics Engineering and Computer Science,
> Peking
> > > > > > University
> > > > > > > > Tel:+86-15650713730
> > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Benchao Li
> > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > University
> > > > > > Tel:+86-15650713730
> > > > > > Email: [hidden email]; [hidden email]
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
明白了,谢谢。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午5:08写道:

> 不是这个意思。是说scalar function不需要额外处理,所以它一套逻辑就可以处理两种类型的消息了。
> 它不需要区分消息类型,只需要处理消息本身(消息类型是在header里)。
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:00写道:
>
> > 那也就是说UDF这种ScalarFunction,是没有办法处理Retract的了?因为它把DELETE记录和INSERT记录都做了相同的操作。
> >
> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:54写道:
> >
> > > Hi Jingsong,
> > > 我建了一个jira[1] 来跟踪这个事情。
> > >
> > > Hi lec,
> > > sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
> > > scalar function不需要这样子处理,因为它本身没有状态。scalar
> > function对于消息的类型是不需要判断的,处理过程都是一样的。
> > >
> > > [1] https://issues.apache.org/jira/browse/FLINK-17343
> > >
> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:
> > >
> > > > 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
> > > > 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
> > > >      if( type='DELETE'){
> > > >          sum=sum-value
> > > >     } else if(type='INSERT'){
> > > >         sum=sum+value
> > > >    }
> > > >  的逻辑呢?
> > > >  但是在ScalarFunction中,只实现了eval方法,也就是只有
> INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
> > > >
> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
> > > >
> > > > > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
> > > > >
> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
> > > > >
> > > > > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > > > > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> > > > > >
> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> > > > > >
> > > > > > > time interval join不允许输入是非append的。
> > > > > > >
> > > > > > >
> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > > > > > >
> > > > > > > > 那如果是两个retract算子后的流进行time interval join,
> > > > > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > > > > > >
> > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > > > > > >
> > > > > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > > > > > window的确是会需要处理retract,除此之外,regular
> > > > > > > > > group by也需要。
> > > > > > > > >
> > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > > > > > >
> > > > > > > > > > 谢谢。
> > > > > > > > > >
> > > > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > > > > > 但是对于Table
> > > > > > > > > >
> > > > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> > > > > implemented
> > > > > > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > > > > > window的时候才有retract?
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > > > > > >
> > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > > > > > >
> > > > > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > > > > > >
> > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> > 下午3:45写道:
> > > > > > > > > > >
> > > > > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四
> > 下午3:39写道:
> > > > > > > > > > > >
> > > > > > > > > > > > > Hi lec,
> > > > > > > > > > > > >
> > > > > > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > > >
> > > > > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > > > > > fire或者late
> > > > > > > > > > fire的时候。
> > > > > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > > >
> > > > > > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > > > > >
> retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > >
> > > > >
> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > > >
> > > > > > > > > > > > > 是的。
> > > > > > > > > > > > >
> > > > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> > > > 下午3:25写道:
> > > > > > > > > > > > >
> > > > > > > > > > > > > > Hi:
> > > > > > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > > > > > >
> >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > > > >
> > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > --
> > > > > > > > > > > > >
> > > > > > > > > > > > > Benchao Li
> > > > > > > > > > > > > School of Electronics Engineering and Computer
> > Science,
> > > > > > Peking
> > > > > > > > > > > University
> > > > > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > --
> > > > > > > > > > >
> > > > > > > > > > > Benchao Li
> > > > > > > > > > > School of Electronics Engineering and Computer Science,
> > > > Peking
> > > > > > > > > University
> > > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > >
> > > > > > > > > Benchao Li
> > > > > > > > > School of Electronics Engineering and Computer Science,
> > Peking
> > > > > > > University
> > > > > > > > > Tel:+86-15650713730
> > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: [hidden email]; [hidden email]
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: [hidden email]; [hidden email]
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: [hidden email]; [hidden email]
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: [hidden email]; [hidden email]
>
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

lec ssmi
不好意思,刚才看了一下源码:

这个是over window的聚合操作。
这个类实现没有实现producesUpdates 和producesRetractions,而这两个方法的默认值都是False。是否说明,只能有INSERT类型的记录?
如果是的话,不就是说明over window操作的输出是一个Append-only stream?

lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:13写道:
明白了,谢谢。

Benchao Li <[hidden email]> 于2020年4月23日周四 下午5:08写道:
不是这个意思。是说scalar function不需要额外处理,所以它一套逻辑就可以处理两种类型的消息了。
它不需要区分消息类型,只需要处理消息本身(消息类型是在header里)。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:00写道:

> 那也就是说UDF这种ScalarFunction,是没有办法处理Retract的了?因为它把DELETE记录和INSERT记录都做了相同的操作。
>
> Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:54写道:
>
> > Hi Jingsong,
> > 我建了一个jira[1] 来跟踪这个事情。
> >
> > Hi lec,
> > sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
> > scalar function不需要这样子处理,因为它本身没有状态。scalar
> function对于消息的类型是不需要判断的,处理过程都是一样的。
> >
> > [1] https://issues.apache.org/jira/browse/FLINK-17343
> >
> > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:
> >
> > > 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
> > > 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
> > >      if( type='DELETE'){
> > >          sum=sum-value
> > >     } else if(type='INSERT'){
> > >         sum=sum+value
> > >    }
> > >  的逻辑呢?
> > >  但是在ScalarFunction中,只实现了eval方法,也就是只有 INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
> > >
> > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
> > >
> > > > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
> > > >
> > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
> > > >
> > > > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > > > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> > > > >
> > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
> > > > >
> > > > > > time interval join不允许输入是非append的。
> > > > > >
> > > > > >
> > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
> > > > > >
> > > > > > > 那如果是两个retract算子后的流进行time interval join,
> > > > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > > > > >
> > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
> > > > > > >
> > > > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > > > > window的确是会需要处理retract,除此之外,regular
> > > > > > > > group by也需要。
> > > > > > > >
> > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:05写道:
> > > > > > > >
> > > > > > > > > 谢谢。
> > > > > > > > >
> > > > 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
> > > > > > > > > 但是对于Table
> > > > > > > > >
> > > > API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
> > > > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
> > > > implemented
> > > > > > > > > for  datastream bounded over aggregate  。 是否说只有over
> > > > > > window的时候才有retract?
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
> > > > > > > > >
> > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午3:59写道:
> > > > > > > > >
> > > > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > > > > >
> > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> 下午3:45写道:
> > > > > > > > > >
> > > > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四
> 下午3:39写道:
> > > > > > > > > > >
> > > > > > > > > > > > Hi lec,
> > > > > > > > > > > >
> > > > > > > > > > > >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > >
> > > > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
> > > > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window operator,在配置了early
> > > > > fire或者late
> > > > > > > > > fire的时候。
> > > > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
> > > > > > > > > > > >
> > > > > > > > > > > >
> 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > >
> > > > > > > > > > > > 这个也不绝对。大部分时候是。
> > > > > > > > > > > > 这个取决于这个算子本身是不是会consume
> > > > > > > > > > > > retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > >
> > > > > > >
> > > >
> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > >
> > > > > > > > > > > > 是的。
> > > > > > > > > > > >
> > > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
> > > 下午3:25写道:
> > > > > > > > > > > >
> > > > > > > > > > > > > Hi:
> > > > > > > > > > > > >    有几个问题想咨询下大佬:
> > > > > > > > > > > > >
>  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
> > > > > > > > > > > > >
> > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
> > > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > > > > >
> > > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > --
> > > > > > > > > > > >
> > > > > > > > > > > > Benchao Li
> > > > > > > > > > > > School of Electronics Engineering and Computer
> Science,
> > > > > Peking
> > > > > > > > > > University
> > > > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > >
> > > > > > > > > > Benchao Li
> > > > > > > > > > School of Electronics Engineering and Computer Science,
> > > Peking
> > > > > > > > University
> > > > > > > > > > Tel:+86-15650713730
> > > > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > >
> > > > > > > > Benchao Li
> > > > > > > > School of Electronics Engineering and Computer Science,
> Peking
> > > > > > University
> > > > > > > > Tel:+86-15650713730
> > > > > > > > Email: [hidden email]; [hidden email]
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Benchao Li
> > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > University
> > > > > > Tel:+86-15650713730
> > > > > > Email: [hidden email]; [hidden email]
> > > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >
> > > > Benchao Li
> > > > School of Electronics Engineering and Computer Science, Peking
> > University
> > > > Tel:+86-15650713730
> > > > Email: [hidden email]; [hidden email]
> > > >
> > >
> >
> >
> > --
> >
> > Benchao Li
> > School of Electronics Engineering and Computer Science, Peking University
> > Tel:+86-15650713730
> > Email: [hidden email]; [hidden email]
> >
>


--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: retract的问题

Benchao Li
嗯嗯,是的。over window的确是不支持retract输入,只支持append输入。
而且它也只有append输出。

lec ssmi <[hidden email]> 于2020年4月23日周四 下午6:32写道:

> 不好意思,刚才看了一下源码:
> [image: image.png]
> 这个是over window的聚合操作。
> 这个类实现没有实现producesUpdates 和producesRetractions,
> 而这两个方法的默认值都是False。是否说明,只能有INSERT类型的记录?
> 如果是的话,不就是说明over window操作的输出是一个Append-only stream?
>
> lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:13写道:
>
>> 明白了,谢谢。
>>
>> Benchao Li <[hidden email]> 于2020年4月23日周四 下午5:08写道:
>>
>>> 不是这个意思。是说scalar function不需要额外处理,所以它一套逻辑就可以处理两种类型的消息了。
>>> 它不需要区分消息类型,只需要处理消息本身(消息类型是在header里)。
>>>
>>> lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:00写道:
>>>
>>> >
>>> 那也就是说UDF这种ScalarFunction,是没有办法处理Retract的了?因为它把DELETE记录和INSERT记录都做了相同的操作。
>>> >
>>> > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:54写道:
>>> >
>>> > > Hi Jingsong,
>>> > > 我建了一个jira[1] 来跟踪这个事情。
>>> > >
>>> > > Hi lec,
>>> > >
>>> sum函数不属于scalar函数。sum的内置实现是有retract的版本的,参考:IntSumWithRetractAggFunction
>>> > > scalar function不需要这样子处理,因为它本身没有状态。scalar
>>> > function对于消息的类型是不需要判断的,处理过程都是一样的。
>>> > >
>>> > > [1] https://issues.apache.org/jira/browse/FLINK-17343
>>> > >
>>> > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:41写道:
>>> > >
>>> > > > 其实我想说,如果说sql内置的算子,包括UDF这种ScalarFunction默认都是能够处理retract的话,
>>> > > > 我们举一个最简单的例子:sum函数,那内部实现是否需要具有一个类似于
>>> > > >      if( type='DELETE'){
>>> > > >          sum=sum-value
>>> > > >     } else if(type='INSERT'){
>>> > > >         sum=sum+value
>>> > > >    }
>>> > > >  的逻辑呢?
>>> > > >  但是在ScalarFunction中,只实现了eval方法,也就是只有
>>> INSERT的那部分相加的逻辑,没有DELETE那部分相减的逻辑。
>>> > > >
>>> > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:33写道:
>>> > > >
>>> > > > > 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
>>> > > > >
>>> > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:29写道:
>>> > > > >
>>> > > > > > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
>>> > > > > > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
>>> > > > > >
>>> > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:26写道:
>>> > > > > >
>>> > > > > > > time interval join不允许输入是非append的。
>>> > > > > > >
>>> > > > > > >
>>> > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四 下午4:18写道:
>>> > > > > > >
>>> > > > > > > > 那如果是两个retract算子后的流进行time interval join,
>>> > > > > > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
>>> > > > > > > >
>>> > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四 下午4:11写道:
>>> > > > > > > >
>>> > > > > > > > > 内置的*聚合函数*应该是都能处理retract消息的。
>>> > > > > > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
>>> > > > > > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
>>> > > > > > > > window的确是会需要处理retract,除此之外,regular
>>> > > > > > > > > group by也需要。
>>> > > > > > > > >
>>> > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
>>> 下午4:05写道:
>>> > > > > > > > >
>>> > > > > > > > > > 谢谢。
>>> > > > > > > > > >
>>> > > > >
>>> 其实,如果从DataStream编程的角度上来说,下游是能够收到一个Tuple2类型的数据,也就是能够硬编码处理retract的结果。
>>> > > > > > > > > > 但是对于Table
>>> > > > > > > > > >
>>> > > > >
>>> API&SQL来说,特别是SQL,内置函数本身并没有一个增加处理Retract的逻辑(当然,可能内置算子已经包含了,我没有去看而已)。
>>> > > > > > > > > > 我在编写UDAF的时候,里面有个retract方法,注释写的是: This function must be
>>> > > > > implemented
>>> > > > > > > > > > for  datastream bounded over aggregate  。 是否说只有over
>>> > > > > > > window的时候才有retract?
>>> > > > > > > > > >
>>> > > > > > > > > >
>>> > > > > > > > >
>>> > > > > > > >
>>> > > > > > >
>>> > > > > >
>>> > > > >
>>> > > >
>>> > >
>>> >
>>> 另外,对于我们写的UDF,UDTF,其实也没有提供retract的方式,毕竟传入的参数只是字段值,而没有DataStream中的Tuple2中的Boolean值。其他的内置方法也一样,好像对于retract的处理,sql中只有UDAF里面有所提及。
>>> > > > > > > > > >
>>> > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四
>>> 下午3:59写道:
>>> > > > > > > > > >
>>> > > > > > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
>>> > > > > > > > > > >
>>> > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
>>> > 下午3:45写道:
>>> > > > > > > > > > >
>>> > > > > > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
>>> > > > > > > > > > > >
>>> > > > > > > > > > > >
>>> > > > > > > > > > > > Benchao Li <[hidden email]> 于2020年4月23日周四
>>> > 下午3:39写道:
>>> > > > > > > > > > > >
>>> > > > > > > > > > > > > Hi lec,
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > >
>>> 1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > 这个是某些算子会有这个行为,比如普通的group by,就会发送retract消息。
>>> > > > > > > > > > > > > 另外有一些算子是在某些特定配置下才会有这个行为,比如window
>>> operator,在配置了early
>>> > > > > > fire或者late
>>> > > > > > > > > > fire的时候。
>>> > > > > > > > > > > > > 还有些算子本身不会产生,但是会传递,比如calc算子
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > >
>>> > 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > 这个也不绝对。大部分时候是。
>>> > > > > > > > > > > > > 这个取决于这个算子本身是不是会consume
>>> > > > > > > > > > > > >
>>> retraction,目前我好想没见到有算子会消费retraction,但是不产生retraction的。
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > >
>>> > > > > > > > > > >
>>> > > > > > > >
>>> > > > >
>>> > 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > 是的。
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > lec ssmi <[hidden email]> 于2020年4月23日周四
>>> > > > 下午3:25写道:
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > > Hi:
>>> > > > > > > > > > > > > >    有几个问题想咨询下大佬:
>>> > > > > > > > > > > > > >
>>> >  1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置?
>>> > > > > > > > > > > > > >
>>> > > >  2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。
>>> > > > > > > > > > > > > >
>>> > > > > > > > > > > >
>>> > > > > > > > > >
>>> > > > > > >
>>> > > >
>>> 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来?
>>> > > > > > > > > > > > > >
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > --
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > > > Benchao Li
>>> > > > > > > > > > > > > School of Electronics Engineering and Computer
>>> > Science,
>>> > > > > > Peking
>>> > > > > > > > > > > University
>>> > > > > > > > > > > > > Tel:+86-15650713730
>>> > > > > > > > > > > > > Email: [hidden email]; [hidden email]
>>> > > > > > > > > > > > >
>>> > > > > > > > > > > >
>>> > > > > > > > > > >
>>> > > > > > > > > > >
>>> > > > > > > > > > > --
>>> > > > > > > > > > >
>>> > > > > > > > > > > Benchao Li
>>> > > > > > > > > > > School of Electronics Engineering and Computer
>>> Science,
>>> > > > Peking
>>> > > > > > > > > University
>>> > > > > > > > > > > Tel:+86-15650713730
>>> > > > > > > > > > > Email: [hidden email]; [hidden email]
>>> > > > > > > > > > >
>>> > > > > > > > > >
>>> > > > > > > > >
>>> > > > > > > > >
>>> > > > > > > > > --
>>> > > > > > > > >
>>> > > > > > > > > Benchao Li
>>> > > > > > > > > School of Electronics Engineering and Computer Science,
>>> > Peking
>>> > > > > > > University
>>> > > > > > > > > Tel:+86-15650713730
>>> > > > > > > > > Email: [hidden email]; [hidden email]
>>> > > > > > > > >
>>> > > > > > > >
>>> > > > > > >
>>> > > > > > >
>>> > > > > > > --
>>> > > > > > >
>>> > > > > > > Benchao Li
>>> > > > > > > School of Electronics Engineering and Computer Science,
>>> Peking
>>> > > > > University
>>> > > > > > > Tel:+86-15650713730
>>> > > > > > > Email: [hidden email]; [hidden email]
>>> > > > > > >
>>> > > > > >
>>> > > > >
>>> > > > >
>>> > > > > --
>>> > > > >
>>> > > > > Benchao Li
>>> > > > > School of Electronics Engineering and Computer Science, Peking
>>> > > University
>>> > > > > Tel:+86-15650713730
>>> > > > > Email: [hidden email]; [hidden email]
>>> > > > >
>>> > > >
>>> > >
>>> > >
>>> > > --
>>> > >
>>> > > Benchao Li
>>> > > School of Electronics Engineering and Computer Science, Peking
>>> University
>>> > > Tel:+86-15650713730
>>> > > Email: [hidden email]; [hidden email]
>>> > >
>>> >
>>>
>>>
>>> --
>>>
>>> Benchao Li
>>> School of Electronics Engineering and Computer Science, Peking University
>>> Tel:+86-15650713730
>>> Email: [hidden email]; [hidden email]
>>>
>>

--

Benchao Li
School of Electronics Engineering and Computer Science, Peking University
Tel:+86-15650713730
Email: [hidden email]; [hidden email]