Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doris 数据源分页失效 #2328

Open
haochuliu opened this issue Jun 17, 2024 · 0 comments
Open

doris 数据源分页失效 #2328

haochuliu opened this issue Jun 17, 2024 · 0 comments

Comments

@haochuliu
Copy link

Datart版本号
1.0.0-rc.3
错误描述
使用 doris 数据源时自动分页会失效,由于 doris 中一般存储的都是些大表,因此一段时间后应用就会 OOM
如何重现

  1. 将 config/logback.xml 中的第四行 INFO 改 DEBUG
  2. 启动服务然后随便找个 doris 的表,写 select 语句,日志中直接查询全表

期望结果
分页生效
截图
如果方便的话,添加一个截图帮助解释你的问题

修改方案
该方案只是临时的,因为 doris 兼容 mysql 语法,datart 中只有 dql,那就直接把 doris 当作 mysql 处理。修改一下文件后重新打包,替换 lib 下的 datart-jdbc-data-provider-1.0.0-rc.3.jar。如果嫌麻烦也可以单独替换 jar 包中的 DorisDataProviderAdapter.class文件重启即可。
修改后的 data-providers/jdbc-data-provider/src/main/java/datart/data/provider/jdbc/adapters/DorisDataProviderAdapter.java 文件:

package datart.data.provider.jdbc.adapters;

import datart.data.provider.jdbc.JdbcDriverInfo;
import org.apache.calcite.sql.SqlDialect;

public class DorisDataProviderAdapter extends JdbcDataProviderAdapter {

    @Override
    protected SqlDialect getDefaultSqlDialect(JdbcDriverInfo driverInfo) throws Exception {
        driverInfo.setDbType(SqlDialect.DatabaseProduct.MYSQL.name());
        driverInfo.setSupportSqlLimit(Boolean.TRUE);
        return super.getDefaultSqlDialect(driverInfo);
    }
}

疑惑点:

  1. 这里实在不理解 getDefaultSqlDialect(JdbcDriverInfo driverInfo) 方法为何需要参数 JdbcDriverInfo driverInfo 这个参数明明直接
    this.driverInfo 就能获取
  2. executeOnSource 方法在这里就是为了给不指定字段排序的 SQL 加上 ORDER BY NULL,这样会使得直接从终端查询的结果与使用 datart 查询的结果集不一致。因此直接删除也不会造成影响

分页失效原因
datart 处理 sql 用的 calcite 框架,该框架不支持 doris 数据源(最新版本同样不支持),详见定义 org.apache.calcite.sql.SqlDialect.DatabaseProduct,其它数据源分页失效应该也是这个问题,使用前可以看一些枚举类中是否有定义

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant