[Estrutura Hasor] Mecanismo de consulta de agregação DataQL SQL executor relata erro Dialeto de consulta ausente análise de causa e solução (para banco de dados GreenPlum)

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.Por favor, adicione a descrição da imagem

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.

Acho que você gosta

Origin juejin.im/post/7085354255942418469
Recomendado
Clasificación