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

posted on 2021-02-23 21:46  荣锋亮  阅读(10)  评论(0编辑  收藏

导航