Hi:
有几个问题想咨询下大佬: 1.retract在什么时候触发呢?是有groupby或者窗口就默认retract吗,还是需要配置? 2.如果上游操作有retract,那么不是所有的下游都带有retract性质了?不然下游计算的数据就不准了。 3.sql操作的话,如果上游是有retract的,那下游select然后print,会把DELETE和INSERT这两条记录都print出来? |
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 <[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] > |
这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
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] |
谢谢。
其实,如果从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] > |
内置的*聚合函数*应该是都能处理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] |
那如果是两个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] > |
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 |
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] |
奇怪,目前我们使用阿里云的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] > |
阿里云上提供的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] |
可以建个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 |
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] > |
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] |
那也就是说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] > |
不是这个意思。是说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 <[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] > |
不好意思,刚才看了一下源码: 这个是over window的聚合操作。 这个类实现没有实现producesUpdates 和producesRetractions,而这两个方法的默认值都是False。是否说明,只能有INSERT类型的记录? 如果是的话,不就是说明over window操作的输出是一个Append-only stream? lec ssmi <[hidden email]> 于2020年4月23日周四 下午5:13写道:
|
嗯嗯,是的。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] |
Free forum by Nabble | Edit this page |