[Marco Hasor] Motor de consulta de agregación DataQL El ejecutor SQL informa de error Análisis y solución de la causa faltante del dialecto de consulta (para la base de datos GreenPlum)

Este artículo ha participado en el evento "Ceremonia de creación de recién llegados" para comenzar juntos el camino de la creación de oro.

1. Descripción del error

Dos plataformas se construyen localmente. Las versiones de las dependencias principales de hasor son las mismas. Ambas bases de datos de GreenPlum están conectadas y se ejecutan las mismas declaraciones de DataQL:

        <!--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>
复制代码

Aquí está el DataQL ejecutado:

// 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 qué hay dos plataformas, la diferencia es el archivo de configuración:

# 报错配置【使用的是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
复制代码

Mensaje de error [se omite alguna información innecesaria]:

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álisis de causas

Dado que es un proyecto antiguo que integra Hasor, el proyecto utiliza el controlador greenplum. El sitio web oficial describe el dialecto utilizado por el ejecutor de la siguiente manera [después de la versión 4.2.1, el ejecutor SQL inferirá automáticamente el dialecto correspondiente de acuerdo con la conexión de la base de datos utilizada] y Hasor El dialecto de la base de datos greenplum no es compatible, pero sí lo es PostgreSQL. [La base de datos gp es una evolución de pg data], así que considere usar FRAGMENT_SQL_PAGE_DIALECT para configurarlo:Por favor agregue la descripción de la imagen

3. Resolución de problemas

Según la descripción del sitio web oficial, DataQL ha agregado una declaración para establecer el dialecto:

hint FRAGMENT_SQL_PAGE_DIALECT = postgresql
复制代码

Error:

{
  "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}"
}
复制代码

Me reí cuando lo vi [modificado y probado nuevamente]:

hint FRAGMENT_SQL_PAGE_DIALECT = "postgresql"
复制代码

éxito:

{
  "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. Haz un resumen

El sitio web oficial es la mejor información para resolver el problema, pero la documentación de muchos sitios web oficiales casi no tiene sentido. Al final, es necesario analizar el problema y ver el mensaje de error. Si el mensaje de error no está claro, es necesario analizar el código fuente.

Supongo que te gusta

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