• 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

  • 相关阅读:
    直接报错了:无法加载文件 C:UsersAdministratorAppDataRoaming pmvue.ps1,因为在此系统中禁止执行脚本
    [vue系列]-vue+vue-i18n+elementUI 国际化
    new vue 实例发生了什么呢?
    vue引用外部JS的两种方案
    web轻量级富文本框编辑
    Cannot read property '_withTask' of undefined
    element 动态合并表格
    前端如何获取原始图片大小
    ASP.Net Core使用Ajax局部更新
    ASP.NET Core中的jQuery Unobtrusive Ajax帮助器
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14438381.html
Copyright © 2020-2023  润新知