使用Flink Table API & SQL编写流应用,SQL中的NOW()等时间函数如何理解

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

使用Flink Table API & SQL编写流应用,SQL中的NOW()等时间函数如何理解

Longdexin
请问,当流应用运行起来后,随着时间的推移,比如,到第二天了,SQL中的NOW()会随着处理时间不断更新,从而保证处理逻辑的正确性吗?在我的理解中,在流应用启动的那一刻,NOW()的值就确定了,以后也不会再改变了,那么,使用什么方式可以让SQL中的时间比较逻辑与时俱进呢?非常感谢。



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re:使用Flink Table API & SQL编写流应用,SQL中的NOW()等时间函数如何理解

hailongwang
 Hi Longdexin,
根据文档[1]描述,now 函数是非确定性的,意思是不会在 RelNode 优化阶段将其 常量折叠优化掉,所以这个函数是会不断更新的,并不是启动的时间,并且一直不变。
在自定义 UDF 时候,可以覆盖方法
`default boolean isDeterministic
` 来决定是确定性的还是非确定性的,默认是true。




[1]https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/functions/systemFunctions.html#temporal-functions



Best,
Hailong Wang

在 2020-10-22 19:13:03,"Longdexin" <[hidden email]> 写道:
>请问,当流应用运行起来后,随着时间的推移,比如,到第二天了,SQL中的NOW()会随着处理时间不断更新,从而保证处理逻辑的正确性吗?在我的理解中,在流应用启动的那一刻,NOW()的值就确定了,以后也不会再改变了,那么,使用什么方式可以让SQL中的时间比较逻辑与时俱进呢?非常感谢。
>
>
>
>--
>Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: Re:使用Flink Table API & SQL编写流应用,SQL中的NOW()等时间函数如何理解

Longdexin
Hi Hailong Wang,
非常感谢您的回答,很好地解决了我的疑问。
经过代码测试,NOW()等函数返回值确实会实时更新。
Best,
Longdexin



--
Sent from: http://apache-flink.147419.n8.nabble.com/