Flink作业因无效SQL查询意外转为FINISHED状态的问题咨询
Flink作业因含
field <> NULL的SQL静默转为FINISHED状态的原因分析 这是Flink的预期行为,并非Bug,具体原因如下:
SQL三值逻辑中UNKNOWN的含义
SQL采用三值逻辑(TRUE/FALSE/UNKNOWN),当比较运算涉及NULL时,结果会是UNKNOWN——文档里明确说明value1 <> value2在任一值为NULL时返回UNKNOWN。UNKNOWN表示逻辑结果不确定,Flink SQL的过滤条件(WHERE/ON等)会自动排除结果为UNKNOWN的行,也就是说field <> NULL这个条件永远匹配不到任何数据。作业进入FINISHED状态的触发逻辑
你的作业配置为永久运行,但当SQL逻辑导致没有任何数据会被输出到下游Kafka时,Flink会判定该作业不会再有新的输出,即便数据源是Kafka这种无限流,也会认为作业已完成,从而转为FINISHED状态。为什么不会报错
field <> NULL是语法合法的SQL,只是语义上无实际意义(永远不会匹配数据),Flink不会将这类语义问题判定为错误,而是严格遵循SQL标准执行,最终因无输出导致作业结束。
建议:判断字段非空应使用SQL标准写法field IS NOT NULL,避免出现这种无意义的过滤逻辑。
内容的提问来源于stack exchange,提问作者C.S.
相关产品推荐
相关产品推荐

