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
解決:兩邊類型轉(zhuǎn)成一樣的。
3.報錯
Caused by: java.lang.IllegalArgumentException: Either all or none of the following options should be provided: lookup.cache.max-rows lookup.cache.ttl
原因:這兩個參數(shù)要么同時存在,要么同時不存在
解決:看自己需要,如果跑批任務的話,加不加都行,反正跑完內(nèi)存就釋放了。
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 自動轉(zhuǎn)成boolean類型,假設sql里面有
where deleted = 0
這種條件,而deleted的定義恰好是tinyint,可能會報這個錯誤。
解決:在jdbc鏈接后面拼上參數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-505601.html
&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排序。文章來源地址http://www.zghlxwxcb.cn/news/detail-505601.html
到了這里,關于flink sql 校驗常見錯誤及解決辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!