dremio sql server 自定义connector开发解决中文乱码问题
在通过反编译查看dremio ce 版本的jdbc 插件,发现对于sql server 的乱码是因为一个配置引起的
所以以下是尝试基于官方的机制,写一个sql server 的扩展,方便集成使用
项目结构
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dalong.jdbc</groupId>
<artifactId>my-mssql</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<version.dremio>13.0.0-202101272034330307-20fb9275</version.dremio>
</properties>
<dependencies>
<dependency>
<groupId>com.dremio.community.plugins</groupId>
<artifactId>dremio-ce-jdbc-plugin</artifactId>
<version>${version.dremio}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre8</version>
<scope>provided</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>tencent-public</id>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</repository>
<repository>
<id>dremio-public</id>
<url>http://maven.dremio.com/public/</url>
</repository>
<repository>
<id>dremio-free</id>
<url>http://maven.dremio.com/free/</url>
</repository>
</repositories>
</project>
- 代码说明
核心部分主要是修改了关于字符编码的
MyMSSQLDialect.java
public boolean supportsOver(RexOver over) {
boolean hasEmptyFrame = over.getWindow().getLowerBound() == null && over.getWindow().getUpperBound() == null || OverUtils.hasDefaultFrame(over);
return hasEmptyFrame ? true : SUPPORTED_WINDOW_AGG_CALLS.contains(over.getAggOperator());
}
public SqlCollation getDefaultCollation(SqlKind kind) {
if (DISABLE_PUSH_COLLATION) {
return null;
} else {
// switch(kind) {
// case LITERAL:
// case IDENTIFIER:
// return this.MSSQL_BINARY_COLLATION;
// default:
// return null;
// }
return null;
}
}
详细代码参考github代码
使用
- 构建
mvn clean package
- dremio 集成
很简单,copy 文件到dremio 的jars目录,重启服务,自定义的驱动就出现了
说明
以前有写过简单的sql server 乱码的解决方法, 当时的方法比较简单,更多是一个hack,我们应该通过代码通用的解决,代码很简单,已经放github了
需要的可以直接使用
参考资料
https://github.com/rongfengliang/my-dremio-mssql-connector
https://github.com/rongfengliang/dremio-jdbc-ce-plugin-code
https://www.cnblogs.com/rongfengliang/p/14433279.html