Este artigo participou do evento "Newcomer Creation Ceremony" para iniciar juntos o caminho da criação de ouro.
1. Descrição do erro
Duas plataformas são construídas localmente. As versões de dependências de has ou core são as mesmas. Ambos os bancos de dados GreenPlum são conectados e as mesmas instruções DataQL são executadas:
<!--hasor核心依赖【是老平台接入,由于兼容问题,最终用的并不是最新的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>
复制代码
Aqui está o DataQL executado:
// SQL 执行器切换为分页模式及首页页面设置
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
%>
// 创建分页查询对象
var pageQuery = query(${pageSize},${pageNumber});
// 设置分页信息
run pageQuery.setPageInfo({
"pageSize" : #{pageSize},
"currentPage" : #{pageNumber}
});
// 执行分页查询
var result = pageQuery.data();
// 查询分页信息
//var result = pageQuery.pageInfo();
return result;
复制代码
Por que existem duas plataformas, a diferença é o arquivo de configuração:
# 报错配置【使用的是GreenplumDriver】【这个是要集成项目的配置信息】
spring:
application:
name: dataWay-demo
datasource:
url: jdbc:pivotal:greenplum://xxx.xx.xxx.xxx:2345;DatabaseName=gpdb
username: gpadmin
password: gpadmin
driver-class-name: com.pivotal.jdbc.GreenplumDriver
type: com.alibaba.druid.pool.DruidDataSource
# 未报错配置【使用的是P6SpyDriver和postgresql的组合】
spring:
application:
name: dataWay-demo
datasource:
url: jdbc:p6spy:postgresql://xxx.xx.xxx.xxx:2345/gpdb
username: gpadmin
password: gpadmin
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
type: com.alibaba.druid.pool.DruidDataSource
复制代码
Mensagem de erro [algumas informações desnecessárias são omitidas]:
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. Análise de causa
Por ser um projeto antigo integrando o Hasor, o projeto utiliza o driver greenplum.O site oficial descreve o dialeto utilizado pelo executor da seguinte forma [após a versão 4.2.1, o executor SQL irá inferir automaticamente o dialeto correspondente de acordo com a conexão de banco de dados utilizada] , e Hasor O dialeto do banco de dados greenplum não é suportado, mas o PostgreSQL é suportado.
3. Resolução de problemas
De acordo com a descrição do site oficial, o DataQL adicionou uma declaração para definir o dialeto:
hint FRAGMENT_SQL_PAGE_DIALECT = postgresql
复制代码
Erro:
{
"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}"
}
复制代码
Eu ri quando vi [modificado e testado novamente]:
hint FRAGMENT_SQL_PAGE_DIALECT = "postgresql"
复制代码
sucesso:
{
"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. Faça um resumo
O site oficial é a melhor informação para resolver o problema, mas a documentação de muitos sites oficiais é quase sem sentido. No final, é necessário analisar o problema e observar a mensagem de erro. Se a mensagem de erro não for clara, é necessário analisar o código-fonte.