Hasor【付诸实践 01】低代码框架 DataQL 聚合查询引擎 SQL执行器报错 Query dialect missing 原因分析及解决(针对GreenPlum数据库)
1.報(bào)錯(cuò)說(shuō)明
在本地搭建了兩個(gè)平臺(tái),hasor核心依賴的版本是一致的, 連接的都是GreenPlum數(shù)據(jù)庫(kù) ,且執(zhí)行的是相同的DataQL語(yǔ)句:
<!--hasor核心依賴【是老平臺(tái)接入,由于兼容問(wèn)題,最終用的并不是最新的4.2.5版本】--><dependency><groupId>net.hasor</groupId><artifactId>hasor-spring</artifactId><version>4.2.1</version></dependency><dependency><groupId>net.hasor</groupId><artifactId>hasor-dataway</artifactId><version>4.2.1</version></dependency>以下是執(zhí)行的DataQL:
// SQL 執(zhí)行器切換為分頁(yè)模式及首頁(yè)頁(yè)面設(shè)置 hint FRAGMENT_SQL_QUERY_BY_PAGE = true hint FRAGMENT_SQL_QUERY_BY_PAGE_NUMBER_OFFSET = 1// 定義查詢SQL var query = @@sql() <%select * from yz_test_match %>// 創(chuàng)建分頁(yè)查詢對(duì)象 var pageQuery = query(${pageSize},${pageNumber});// 設(shè)置分頁(yè)信息 run pageQuery.setPageInfo({"pageSize" : #{pageSize}, "currentPage" : #{pageNumber} });// 執(zhí)行分頁(yè)查詢 var result = pageQuery.data();// 查詢分頁(yè)信息 //var result = pageQuery.pageInfo(); return result;為什么說(shuō)是兩個(gè)平臺(tái),不同的地方是配置文件:
# 報(bào)錯(cuò)配置【使用的是GreenplumDriver】【這個(gè)是要集成項(xiàng)目的配置信息】 spring:application:name: dataWay-demodatasource:url: jdbc:pivotal:greenplum://xxx.xx.xxx.xxx:2345;DatabaseName=gpdbusername: gpadminpassword: gpadmindriver-class-name: com.pivotal.jdbc.GreenplumDrivertype: com.alibaba.druid.pool.DruidDataSource# 未報(bào)錯(cuò)配置【使用的是P6SpyDriver和postgresql的組合】 spring:application:name: dataWay-demodatasource:url: jdbc:p6spy:postgresql://xxx.xx.xxx.xxx:2345/gpdbusername: gpadminpassword: gpadmindriver-class-name: com.p6spy.engine.spy.P6SpyDrivertype: com.alibaba.druid.pool.DruidDataSource報(bào)錯(cuò)信息【省略了一部分不必要信息】:
2021-07-23 15:15:26.877 ERROR 9904 --- [nio-8088-exec-1] n.hasor.dataway.service.ApiCallService : [line 9:17~11:2 ,QIL 1:6] Query dialect missing. net.hasor.dataql.runtime.InstructRuntimeException: [line 9:17~11:2 ,QIL 1:6] Query dialect missing. Caused by: java.lang.IllegalArgumentException: Query dialect missing.2.原因分析
由于是老項(xiàng)目集成 Hasor,項(xiàng)目用的是 greenplum 驅(qū)動(dòng),官網(wǎng)是這樣描述執(zhí)行器使用的方言的【在 4.2.1 版本之后,SQL 執(zhí)行器會(huì)根據(jù)使用的數(shù)據(jù)庫(kù)連接自動(dòng)推斷對(duì)應(yīng)的方言】,而 Hasor 并未支持 greenplum 數(shù)據(jù)庫(kù)方言,但是卻支持PostgreSQL,【gp數(shù)據(jù)庫(kù)是從pg數(shù)據(jù)演變而來(lái)】,所以考慮使用 FRAGMENT_SQL_PAGE_DIALECT來(lái)配置一下:
3.問(wèn)題解決
根據(jù)官網(wǎng)描述DataQL添加了設(shè)置方言的語(yǔ)句:
hint FRAGMENT_SQL_PAGE_DIALECT = postgresql報(bào)錯(cuò):
{"success": false,"message": "line 2:33 mismatched input 'postgresql' expecting {'true', 'false', 'null', STRING, HEX_NUM, OCT_NUM, BIT_NUM, INTEGER_NUM, DECIMAL_NUM}","code": 500,"lifeCycleTime": 5,"executionTime": -1,"value": "line 2:33 mismatched input 'postgresql' expecting {'true', 'false', 'null', STRING, HEX_NUM, OCT_NUM, BIT_NUM, INTEGER_NUM, DECIMAL_NUM}" }我一看就笑了【修改之后又測(cè)試】:
hint FRAGMENT_SQL_PAGE_DIALECT = "postgresql"成功:
{"success": true,"message": "OK","code": 0,"lifeCycleTime": 17,"executionTime": 11,"value": {"firstrecommendfield": "豫K9F573","secondrecommendfield": "460010993506966","isusing": 1,"futurestartdate": 1618934400000,"handle": 1,"possibility": 1,"attribution": null,"sourcetype": 0} }4.進(jìn)行總結(jié)
官網(wǎng)是解決問(wèn)題最好的資料,但是不少官網(wǎng)的說(shuō)明文檔都差點(diǎn)兒意思,最終還是要對(duì)問(wèn)題進(jìn)行分析,多看報(bào)錯(cuò)信息,報(bào)錯(cuò)信息不明朗的,就要對(duì)源碼進(jìn)行分析了。
總結(jié)
以上是生活随笔為你收集整理的Hasor【付诸实践 01】低代码框架 DataQL 聚合查询引擎 SQL执行器报错 Query dialect missing 原因分析及解决(针对GreenPlum数据库)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Gitee及GitHub优质项目分享
- 下一篇: Hasor【付诸实践 02】Spring