当前位置:网站首页 > SQL数据库编程 > 正文

sqlldr(Sqlldr多字节字符错误)



我是 Porterxie,一个爱问为什么的程序员。最近在使用 flink-jdbc-connector 读取 SqlServer 表数据时,因为读取字段与关键字冲突导致读取报错。本文将对该问题进行详细的分析。

1、启动 sql-client,运行如下语句

 
  

2、在 sql-client 中,执行如下查询语句

 
  

3、查看报错信息

4、此时不论将 ·select· 修改成 "select" 或者 [select],在 flink sql 的层面上都是无法解析的

5、在翻阅了 flink 官方文档未果后,我把问题解决方式转移到 flink-jdbc-connector 的源码上(此处我用的 flink-jdbc-connector 3.2 的源码)。同时我们不难梳理出这样一个 flink sql 的处理流程:flink sql 在接收输入的 sql 之后,先进行 flink sql 解析及校验,然后在具体 sink 类中进行最终执行 sql 的构建,调用驱动执行数据查询。

6、因为 flink connector 都是通过 SPI 的方式实现的插件注册,因此代码结构非常清晰明了。因为是读取发生问题,所以我们需要关注的是 DynamicTableSource 的创建,如下所示

7、我们来到 DynamicTableSource getScanRuntimeProvider 看一下通过驱动读取数据库的语句的生成过程,如下所示

8、代码跟进去,来到 AbstractDialect 类

我们可以看到 field 使用了 quoteIdentifier 方法进行包装,因此我们看一下这个方法在 SqlServer 中的实现

可以看到是原样返回,此处我们可以做如下修改进行测试(测试代码仅供参考)

9、重新打包 flink connector jdbc,替换掉 flink lib 中的 flink connector jdbc 包,重启 cluster,执行 sql

在数据集成时,肯定会存在数据表字段与内部字段冲突的情况,因为在数据库表层面来看,能建立这样的字段,就是合理的。而因为数据表字段与内部字段冲突引发报错的问题,建议官方进行文档的完善及给出相应问题修复方案。

到此这篇sqlldr(Sqlldr多字节字符错误)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • sql里循环怎么用(sqlfor循环)2025-08-23 07:00:06
  • mysql的主键约束相当于唯一约束和什么约束的组合(mysql的主键约束相当于唯一约束和什么约束的组合)2025-08-23 07:00:06
  • mysql主键和外键的建立在哪里(mysql主键和外键的建立在哪里查看)2025-08-23 07:00:06
  • mysql导入sql文件没有表(sqlyog导入sql文件没有表)2025-08-23 07:00:06
  • 数据库、表的增删改查操作sql语句语法(数据库、表的增删改查操作sql语句语法)2025-08-23 07:00:06
  • 如何连接redis数据库(redis怎么连接mysql)2025-08-23 07:00:06
  • yml文件配置(yml文件配置mysql)2025-08-23 07:00:06
  • mysql添加主键约束语句(mysql 添加主键约束)2025-08-23 07:00:06
  • druid监控页面打不开(druid监控sql不出现)2025-08-23 07:00:06
  • yml文件配置mysql(yml文件配置mybatis)2025-08-23 07:00:06
  • 全屏图片