需求分析:(用其它方法替代metabase中的某些功能)
功能1.通過對sql查詢語句的分析,得到所有表名,以及所有表的字段名,字段類型,字段注解信息。
功能2.在sql語句執行查詢前,校驗sql語句是否正確,得到校驗后的錯誤信息。
帶着這個需求,我去學習並測試了jsqlparser和calcite和以及druid的相關功能,並在這里記錄自己測試的結果
(該結果只針對sql查詢語句的解析)
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
(后面會補上,待續...)
結論總結:
只有calcite可以得到需求中需要的結果,但是有些函數在calcite中不支持,例如mysql中的group_concat 函數,在執行sql解析時拋出函數不存在異常;
為了解決這個功能,我測試了calcite添加內置函數,但是這個功能有局限性,不太適用我的需求場景,現在未找到方法來替代metabase中解析sql功能。
聲明:此博客為個人學習之用,如與其他作品雷同,純屬巧合,轉載請指明出處!