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

Benchao Li <libenc...@gmail.com> 于2020年4月23日周四 下午4:33写道:

> 阿里云上提供的Blink应该是内部版本,跟社区版本有些不一样。我刚才说的都是基于社区版本的。
>
> lec ssmi <shicheng31...@gmail.com> 于2020年4月23日周四 下午4:29写道:
>
> > 奇怪,目前我们使用阿里云的Blink,使用了join前的两个流,都是通过last_value 加上over
> > window做的,然后再做的join,然后将join的结果进行tumble window 聚合。
> >
> > Benchao Li <libenc...@gmail.com> 于2020年4月23日周四 下午4:26写道:
> >
> > > time interval join不允许输入是非append的。
> > >
> > >
> > > lec ssmi <shicheng31...@gmail.com> 于2020年4月23日周四 下午4:18写道:
> > >
> > > > 那如果是两个retract算子后的流进行time interval join,
> > > > 已经join成功并且发送出去的记录,也会先DELETE掉,再INSERT,然后将这两条记录发送下游?
> > > >
> > > > Benchao Li <libenc...@gmail.com> 于2020年4月23日周四 下午4:11写道:
> > > >
> > > > > 内置的*聚合函数*应该是都能处理retract消息的。
> > > > > 普通的*scalar函数*不需要特殊处理,retract和append消息对它来说都是一样的。
> > > > > 我理解应该主要是UDAF可能需要注意一下是否需要处理retract消息,over
> > > > window的确是会需要处理retract,除此之外,regular
> > > > > group by也需要。
> > > > >
> > > > > lec ssmi <shicheng31...@gmail.com> 于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 <libenc...@gmail.com> 于2020年4月23日周四 下午3:59写道:
> > > > > >
> > > > > > > 这个暂时还没有一篇文档来介绍这部分内容。如果你要了解全部细节,可能只能从源码的角度来了解了。
> > > > > > >
> > > > > > > lec ssmi <shicheng31...@gmail.com> 于2020年4月23日周四 下午3:45写道:
> > > > > > >
> > > > > > > > 这个难道没有一个列表,或者是配置开关之类的吗?难道只能一个一个地尝试?各种算子连接在一起,更难判断了。
> > > > > > > >
> > > > > > > >
> > > > > > > > Benchao Li <libenc...@gmail.com> 于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 <shicheng31...@gmail.com> 于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: libenc...@gmail.com; libenc...@pku.edu.cn
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > Benchao Li
> > > > > > > School of Electronics Engineering and Computer Science, Peking
> > > > > University
> > > > > > > Tel:+86-15650713730
> > > > > > > Email: libenc...@gmail.com; libenc...@pku.edu.cn
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Benchao Li
> > > > > School of Electronics Engineering and Computer Science, Peking
> > > University
> > > > > Tel:+86-15650713730
> > > > > Email: libenc...@gmail.com; libenc...@pku.edu.cn
> > > > >
> > > >
> > >
> > >
> > > --
> > >
> > > Benchao Li
> > > School of Electronics Engineering and Computer Science, Peking
> University
> > > Tel:+86-15650713730
> > > Email: libenc...@gmail.com; libenc...@pku.edu.cn
> > >
> >
>
>
> --
>
> Benchao Li
> School of Electronics Engineering and Computer Science, Peking University
> Tel:+86-15650713730
> Email: libenc...@gmail.com; libenc...@pku.edu.cn
>

回复