我们正在运行Flink作业,这些作业使用Kafka中的数据,执行SQL查询(使用SQL API(并将输出写入Kafka。
我们的作业被配置为永远运行,所以它们永远不应该被完成(除非它们被保存点停止(。然而,我们注意到,对于一些(无效(SQL查询,作业可以启动,但稍后会变为FINISHED。当我们包含类似field <> NULL
的内容时,就是这种情况。Flink的文件上写着:
value1<gt;如果value1不等于value2,则value2返回TRUE;如果value1或value2为NULL,则返回UNKNOWN。
我们不清楚什么是未知,以及当这种情况发生时,工作将如何反应。无论如何,我们都希望它失败,而不是默默地结束。会不会是Flink中的一个bug?这是预期的行为吗?
SQL标准定义了一个三值逻辑系统,其中true、false和unknown可能是比较的结果。您可以使用field IS NOT NULL
而不是field <> NULL
,后者将返回true或false。
我们已经升级到Flink 1.15,无法再重现错误。