Flink sql 報(bào)錯(cuò)問題以及解決
記錄在使用Flink sql時(shí)出現(xiàn)的問題以及解決方式
1.時(shí)間戳問題
消費(fèi)kafka數(shù)據(jù),轉(zhuǎn)換成一個(gè)DataStream后,通過tableEnv進(jìn)行將DataStream的數(shù)據(jù)注冊(cè)成表,在執(zhí)行查詢的時(shí)候出現(xiàn)了報(bào)錯(cuò),后再進(jìn)入到官網(wǎng)查看,說需要傳入一個(gè)timestamp而我傳入的是一個(gè)BigInt,導(dǎo)致出現(xiàn)了報(bào)錯(cuò),
org.apache.flink.table.api.ValidationException: SQL validation failed. From line 1, column 121 to line 1, column 157: Cannot apply 'TUMBLE' to arguments of type 'TUMBLE(<VARCHAR(65536)>, <INTERVAL MINUTE>)'. Supported form(s): 'TUMBLE(<DATETIME>, <DATETIME_INTERVAL>)'
'TUMBLE(<DATETIME>, <DATETIME_INTERVAL>, <TIME>)'
這個(gè)問題我查找半天,我傳入了時(shí)間戳,而他要的是timestamp,后來去官網(wǎng)查找,由于官網(wǎng)沒有給具體的一個(gè)原因,后來我在Flink的釘釘?shù)腁pache Flink China社區(qū)群中,群中Committer大佬指出了問題
在我后來的代碼我中將元素中的時(shí)間戳 新加字段Timestamp類型,在注冊(cè)表的時(shí)候,將時(shí)間戳指定為rowTime,在后面就可以使用時(shí)間進(jìn)行窗口操作了
總結(jié)
也就是說我們直接使用時(shí)間戳是不行的,因?yàn)镕link會(huì)將我們的時(shí)間戳識(shí)別成BigInt,所以我們需要在創(chuàng)建之初需要將時(shí)間戳轉(zhuǎn)換成Timestamp類型才可以
具體代碼