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