== Physical Execution Plan ==

Stage 1 : Data Source

content : Source: TableSourceScan(table=[[default_catalog, default_database, 
test_kafka]], fields=[tz])




Stage 2 : Operator

content : Calc(select=[tt1(tz) AS tz], where=[tt1(tz) IS NOT NULL])

ship_strategy : FORWARD



从执行计划中看出,在select与where中这个tt1(tz)的udf确实调用了两次,看issuse,目前还没有被分配,是否有什么办法可以规避

















在 2021-08-16 09:47:28,"Qishang" <[email protected]> 写道:
>Hi.
>
>应该是这个问题,https://issues.apache.org/jira/browse/FLINK-21573
>
>打印一下执行计划和code gen
>
>
>黄志高 <[email protected]> 于2021年8月15日周日 下午10:06写道:
>
>> hi all,
>>         各位大佬,有没有遇到过eval方法被调用两次问题,在我使用select * from (select tt1(tz) from
>> test_kafka) as t where tz is not null
>> 时,在eval方法进行入参打印时,发现eval方法被调用了两次,当我使用select * from (select tt1(tz) from
>> test_kafka) as t这个sql时,不进行where tz is not null 操作,eval方法此时只会调用一次,如果将where
>> tz is not null 改成 where tz ='某一个具体值'此时eval方法也只会调用一次,一开始我以为是is not null
>> 问题,我进行重写is not null方法,发现eval方法还是调用两次,不过此时发现eval方法是在select tt1(tz) from
>> test_kafka这个阶段发生一次,第二次是在where tz is not
>> null执行后发生,虽然最后输出的结果不是双份,但是我认为eval方法执行两次,对效率有一定的影响,以下附件是我的代码截图,望各位大佬帮忙分析下,flink版本1.12
>>
>>
>>
>>
>>

回复