需求分析:(用其它方法替代metabase中的某些功能)
功能1.經過對sql查詢語句的分析,獲得全部表名,以及全部表的字段名,字段類型,字段註解信息。
功能2.在sql語句執行查詢前,校驗sql語句是否正確,獲得校驗後的錯誤信息。html
帶着這個需求,我去學習並測試了jsqlparser和calcite和以及druid的相關功能,並在這裏記錄本身測試的結果
(該結果只針對sql查詢語句的解析)mysql
jsqlparser:
上手容易,操做簡單,只能對sql語句進行拆分解析,和數據庫無關。
calcite:
功能強大,操做相對jsqlparser複雜一點,對sql語句的解析功能相對jsqlparser來講很強大,
能夠和數據庫創建查詢,在jsqlparser解析結果的基礎上還能夠獲得字段的類型和字段註解。
druid:
sql解析功能和jsqlparser相似,只能對sql語句進行拆分解析;若是用sql監控功能創建sql語句的結果分析,獲得的結果和未創建數據庫鏈接前同樣。
相關api:
jsqlparser:
http://jsqlparser.sourceforge.net/docs/
calcite:
http://calcite.apache.org/apidocs/index.html
druid:
http://tool.oschina.net/apidocs/apidoc?api=druid0.26
相關學習文檔和測試代碼:
jsqlparser
連接:https://www.cnblogs.com/zhihuifan10/articles/11124953.html
calcite
druid
(後面會補上,待續...)sql
結論總結:
只有calcite能夠獲得需求中須要的結果,可是有些函數在calcite中不支持,例如mysql中的group_concat 函數,在執行sql解析時拋出函數不存在異常;
爲了解決這個功能,我測試了calcite添加內置函數,可是這個功能有侷限性,不太適用個人需求場景,如今未找到方法來替代metabase中解析sql功能。數據庫
聲明:此博客爲我的學習之用,如與其餘做品雷同,純屬巧合,轉載請指明出處!apache