0


flink sql 校验常见错误及解决办法

1.报错

Caused by: org.apache.calcite.runtime.CalciteContextException: From line 0, column 0 to line 80, column 25: Illegal mixing of types in CASE or COALESCE statement

原因:CASE WHEN 语句中存在类型不匹配的问题。比如说

case 
when reg_fee like '%美元' then 11.0
else 10
end  as "费用"

解决:这个就要把else 后面的10改为10.0,修改后代码

case 
when reg_fee like '%美元' then 11.0
else 10.0
end  as "费用"

简单讲,就是then 后面的值 要跟else后面的值类型相同,要么都是整形要么都是字符型,不一样就自己cast。

2.报错

org.apache.flink.table.api.ValidationException: SQL validation failed. From line 0, column 0 to line 74, column 58: Cannot apply '*' to arguments of type '<VARCHAR(2147483647)> * <DECIMAL(6, 1)>'. Supported form(s): '<NUMERIC> * <NUMERIC>' '<DATETIME_INTERVAL> * <NUMERIC>' '<NUMERIC> * <DATETIME_INTERVAL>'

原因:这里的’*'符号是相乘的意思,相乘两边的值类型不匹配,一个varchar 一个是decimal
解决:两边类型转成一样的。

3.报错

Caused by: java.lang.IllegalArgumentException: Either all or none of the following options should be provided: lookup.cache.max-rows lookup.cache.ttl

原因:这两个参数要么同时存在,要么同时不存在
解决:看自己需要,如果跑批任务的话,加不加都行,反正跑完内存就释放了。

4.报错

Caused by: java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class java.lang.Integer (java.lang.Boolean and java.lang.Integer are in module java.base of loader 'bootstrap')

原因:这个报错是在任务提交运行时报错,flink会把tinyint 自动转成boolean类型,假设sql里面有

where deleted = 0

这种条件,而deleted的定义恰好是tinyint,可能会报这个错误。
解决:在jdbc链接后面拼上参数

&tinyInt1isBit=false&transformedBitIsBoolean=false

5.其他常见坑

5.1as后面的别名不能有单引号,如果跟关键词冲突可以加。 5.2 flink sql都是单引号,没有双引号,双引号语法校验不通过。 5.3date为关键字,必须加
5.4null作为单个字段使用时需要加单引号’',比如

case when else 'null'

case when name is not null

,这种就不需要加单引号。
5.5 CURRENT_TIMESTAMP() 需要去掉括号。
5.6不能用order by排序。

标签: flink sql java

本文转载自: https://blog.csdn.net/cs3520/article/details/130137061
版权归原作者 cs3520 所有, 如有侵权,请联系我们删除。

“flink sql 校验常见错误及解决办法”的评论:

还没有评论