V2 数据集创建失败的各种情况及解决方案


飞致云 发布于 2024-11-07 / 124 阅读 / 0 评论 /

1 创建关联数据集失败

现象:两表关联(或多表关联),其中 1 表(或多表)为 sql,单独创建 sql 集正常,和其他表关联时,报 SQL ERROR: xxx 语法错误。

原因:创建跨源关联数据集时,会使用 calcite 语法,单独创建 sql 数据集时使用原生数据库语法,所以可能会出现单独创建数据集没问题,但是在与其他数据集关联时报错。

解决方法:到 sql 数据集中,简化 sql,排查语法出现问题的地方,换成适合 calcite 的即可。calcite 语法参考链接。可能出现语法问题的地方:with 语法,时间函数中的 date_add()、date_sub()。

2 带参数的 sql 数据集

现象:在使用不带参数的 sql 数据集时一切正常,但是某些地方使用参数后,就出现报错。此现象一般出现在有 join 的 sql 语句中。

原因:DataEase sql 解析问题

解决办法 :

#开启动态日志
docker logs -f --tail=100 dataease

#在 DataEase 中重新执行 sql,排查解析出现问题的地方,试试换种方式绕开

3 数据查询时间过长,超时导致创建数据集失败

现象:没有出现 1、2 的情况,但是保存的时候失败报错,报错中一般会包含 “timeout“字样,如果没有建议先百度完整报错,95%都可以搜索到。比如搜索 Oracle 的错误代码:ORA-01013:xxxxx

原因:查询时间长,超过了数据库设置的执行时间,或者数据库资源不够终止了查询。

解决办法:在编辑数据源页面中的高级设置中延长查询时间,增加时间还是失败的话,检查资源是否足够,资源不够的增加资源。

4 创建数据集时,所选数据源下数据集显示不完全

现象:比如使用 Oracle 数据源时,数据库中查看有100多张表,但是对接 DataEase 之后只能查看到部分表。

原因:数据库中 schema 的影响,100多张表可能是不同的 schema。

解决方法:查看是不是多个不同的 schema,每个 scheme 创建一个数据源。

5 因数据库模式开启 ANSI_QUOTES,导致数据集创建失败

现象:数据源校验成功,数据集可以正常查询到数据,但是不能保存成功,点击查看数据源表,报错:com.mysaljdbc.exceptions,jdbc4.MySQLSyntaxErrorException: Table 'database.`table`' doesn't exist。

image-2024-11-7_10-25-11.png

原因:DataEase 查表时使用表名为 ‘databaseName.`tableName`’ ,在表名中有 `` ,而数据库中开启 ANSI_QUOTES 时,会影响标识符引用的处理,在默认情况下,反引号表示转义,开启该模式后,反引号不再具有转义含义,导致sql解析出现偏差,出现找不到表的情况。

解决方法:

#查询数据库模式
SELECT @@sql_mode;

#如果结果中出现 ANSI_QUOTES ,将其删除,重启数据库服务即可。

6 因数据库模式开启,导致数据集创建失败

现象:同样的sql,可能其他数据库能跑,在某个数据库中就跑不了,报错:SQL ERROR: Expression #1 of SElECT list is not in GROUP BY clause and contaims nonagiegated column 'jumpserver.ac.status' which is not functionally dependent on columns in GROUP BY clause;this is incompatible with sql mode=only_full _group by

原因:only_full _group by 是 MySQL 数据库的一种模式,该模式是为了保证查询的合法性和结果的准确性,该模式开启后,要求 select 子句中除聚合函数之外的所有列都必须在 group by 子句中出现。

举例:

#不开启 only_full _group by,以下 sql 可以正常执行
select id,name,job,max(age) from info group by id
 
#开启 only_full _group by 后,上述 sql 需更改为
select id,name,job,max(age) from info group by id,name,job

解决方法:

不建议关闭该模式,建议按照上述例子更改 sql。



是否对你有帮助?