dremio sql server 自定义connector开发解决中文乱码问题

作者:神秘网友 发布时间:2021-02-23 20:20:01

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"
    modelVersion4.0.0/modelVersion
    groupIdcom.dalong.jdbc/groupId
    artifactIdmy-mssql/artifactId
    version1.0-SNAPSHOT/version
    properties
        maven.compiler.source8/maven.compiler.source
        maven.compiler.target8/maven.compiler.target
        version.dremio13.0.0-202101272034330307-20fb9275/version.dremio
    /properties
    dependencies
        dependency
            groupIdcom.dremio.community.plugins/groupId
            artifactIddremio-ce-jdbc-plugin/artifactId
            version${version.dremio}/version
            scopecompile/scope
        /dependency
        dependency
            groupIdcom.microsoft.sqlserver/groupId
            artifactIdmssql-jdbc/artifactId
            version8.2.2.jre8/version
            scopeprovided/scope
        /dependency
    /dependencies
    repositories
        repository
            idtencent-public/id
            urlhttp://mirrors.cloud.tencent.com/nexus/repository/maven-public//url
        /repository
        repository
            iddremio-public/id
            urlhttp://maven.dremio.com/public//url
        /repository
        repository
            iddremio-free/id
            urlhttp://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

dremio sql server 自定义connector开发解决中文乱码问题 相关文章

  1. 【项目实战-2】1条SQL竟然要82秒

    【问题表现】 ? 项目系统,多接口混压过程中,发现QPS有掉坑的情况,同时也发现其中一个接口的95分位响应时长明显慢于其它接口。 (掉坑是后台在做切换,可以忽略) 【问题分析与排查思路】 1. 观测后端服务器的资源使用情况,活跃进程数达到15000. 按理来说

  2. presto sql 经典sql 应用

    1 WITH rule_shop_week_AVG_category1 AS ( 2 SELECT ma.shop_info_id ,m.shop_nm 3 ,ma.cat_level_1 AS category1 4 ,array_agg( DISTINCT ma.cat_level_2) 5 ,sum(cast(lw.uv as decimal(20,4)))/SUM(if(lw.uv0,1,0)) as "W1" --summary_商品访客数UV 6 ,I

  3. 4.SQL表数据增、删、改、查

    stu数据表 -id- -name- -age- -sex- 1 "刘备" 18 "M" 1.数据表记录-新增 INSERT INTO 表名 VALUES("0111","张飞",18,"M"); // 插入一条 INSERT INTO 表名 VALUES ("1","张飞",18,"GG"), ("2","关羽",20,"GG"); // 插入多条 2.数据表记录-删除 DELETE FROM s

  4. Access+Mssql+Oracle数据库注入

    Access数据库注入 前言:在常见的注入测试中,由于每个数据库内置架构和应用不同,导致数据库类型将决定注入的手法,Access数据库是小型数据库类型,普遍用于小型WEB应用,其中Access注入手法也相对于较为简单。 第一点:比较Mysql结构及功能 Mysql数据库 数

  5. 数据迁移时报错——ModuleNotFoundError: No module named MySQLdb

    执行命令 python manage.py makemigrations时抛出以下错误 Traceback (most recent call last): File "D:\Program Files\Python\Python37-32\lib\site-packages\django\db\backends\mysql\base.py", line 15, in module import MySQLdb as DatabaseModuleNot

  6. SQL开发指南二续

    自连接的用法 面向集合思维 增强” 面向集合 " SQL这个特性, 自连接用两张表用运算符连接起来,将每张表视为集合 等值自连接 = 非等值自连接 , , 例子:在一张表中查询价格相等的不同商品 select distinct p1.name, p1.price from product p1,product p2 whe

  7. shell脚本自动备份MySQL数据库

    脚本如下: #!/bin/bash#数据库IPdbserver='127.0.0.1'#数据库用户名dbuser='root'#数据密码dbpasswd='123456'#数据库,如有多个库用空格分开dbname='brdb_jtkg_0222 brdb_jtkg_0425'#备份时间backtime=`date +%Y%m%d-%H:%M`#备份输出日志路径logpath='/home/

  8. Asp.net core 学习笔记之 authentication + authorization + identity + identity server 4 + angular 第二篇 (Introduction, Scaffold, Overview)

    1.Introduction to Identity https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identityview=aspnetcore-5.0tabs=visual-studio dotnet new webapp --auth Individual -uld -o WebApp1 new webapp 是做一个 razor page --auth Individ

  9. 老男孩Mysql DBA(SQL/体系结构/数据库架构设计/性能优化)

    导读 MySQL5.7的新特性中,非常突出的特性之一就是sys库,不仅可以通过sys库完成MySQL信息的收集,还可以用来监控和排查问题。 但你知道吗,sys库其实还有很多种玩法,有的或许单看表名就知道了,但有一些,还是需要老司机带路哦~ 一.用户、连接类 查看每个

  10. Hive-常见调优方式 两个面试sql

    Hive作为大数据领域常用的数据仓库组件,在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大;数据倾斜、数据冗余、job或I/O过多、MapReduce分配不合理等因素都对Hive的效率有影响。对Hive的调优既包含对HiveQL语句本身的优化,也包含Hive配置

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词