摘要:用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错

本文分享自华为云社区《GaussDB(DWS)现网案例之collation报错》,作者: 你是猴子请来的救兵吗 。

用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错,ERROR: could not determine which collation to use for string hashing

问题背景

内核版本:GaussDB 8.1.3
业务框架:jalor + mybatis

问题描述:用户创建hash分布表,使用pbe方式执行使用分布列作为查询条件的语句时报错,ERROR: could not determine which collation to use for string hashing

根因分析

源表为hash分布表,当使用分布列作为查询条件时,可以通过节点分区剪枝提升性能;

分布列类型为nvarchar2(100),构造pbe剪枝语句时,需要对传入变量进行类型转换和精度转换,未正确更新collation,导致执行报错

场景复现

建表数据

drop table t1;
create table t1(c1 nvarchar2(5),c2 varchar)with (orientation=column)distribute by hash(c1);--分布列类型为nvarchar2(n)
insert into t1(c1) values(generate_series(1,10));

场景1:client + p/e

prepare c1(nvarchar2) as select c2 from t1 where c1 = $1;
execute c1(5);

场景2:jdbc + p/b/e

PreparedStatement pstmt = con.prepareStatement("select c2 from t1 where c1 = ?;");
pstmt.setString(1, "5");
ResultSet rs = pstmt.executeQuery();

场景3:jalor + *Dao.*.xml

<delete id="query">
select c2 from t1 where c1 = #{c1}
</delete>

规避办法

任选一种既可,推荐第一种,改动小影响小

1,将分布列类型nvarchar2(n)修改为nvarchar2或varchar(n)

2,使用拼接sql的办法执行语句,而不是pbe

3,语句中指定collate子句,如select c2 from t1 where c1 collate "default" = ?;

4,升级版本

知识小结

问题条件:

1,内核版本8.1.3 ≤ version ≤ 8.1.3.300

2,分布列包含nvarchar2(n)类型字段

3,使用pbe的方式执行语句

4,语句过滤条件包含所有分布列

规避方法:

打破以上任一条件即可规避

点击关注,第一时间了解华为云新鲜技术~

GaussDB(DWS)现网案例:collation报错的更多相关文章

  1. 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法

    一开始进入系统显示reboot and select proper boot device or insert boot media in selected boot device and press ...

  2. 映射内网ftp服务器到公网报错问题解决

    这两天公司测试环境有个需求要让合作方通过ftp推送数据,一般内网环境是不会对公网开放ftp服务的,但是因为是临时需求就帮着搭了ftp服务,并且做了公网映射.ftp服务搭好之后在内网访问正常,但是在公网 ...

  3. angular 官网英雄案例 报错整理

    1.导入of 报错 import { of } from 'rxjs/observable/of'; 2. 服务注入报错 在app.module.ts引入 3.使用angular-in-memory- ...

  4. 新网注册域名如何转向其他(如花生壳)DNS(不会报错,已经转入成功)

    最近在玩域名,发现相比较来说,新网的域名注册费用相对廉价好多. 但是我以前是用花生壳的,用惯了花生壳,就觉得新网的域名管理界面很不适应,并不是新网的不好,而是习惯了花生壳. 那么如何将新网注册的域名D ...

  5. 案例:Oracle报错ASM磁盘组不存在或没有mount

    案例:Oracle报错ASM磁盘组不存在或没有mount 环境:RHEL 6.5 + Oracle Standby RAC 11.2.0.4 我做Standby RAC实验时,在恢复控制文件时,报错无 ...

  6. struts项目部署在Tomca上在断网情况下启动报错

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6015693.html 前段时间,项目部署到现场后,反馈Tomcat能正常启动,但是项目有时访问不了也不报错. ...

  7. CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析

    php代码很简单: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,& ...

  8. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)

    无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...

  9. plsql excel导入报错:未发现数据源名称并且未指定默认驱动程序

        1.情景展示 使用plsql的odbc导入器,导入excel数据时,报错信息如下: anydac 未发现数据源名称如何处理 2.原因分析 操作系统的问题,我的是64位的系统,plsql支持32 ...

  10. KEIL建立新唐MCU的工程时,移植官网程序报错变量未定义问题解决方法

    最近在使用新唐的MCU,新唐的MCU使用还算方便,你安装好KEIL之后再安装 Nu-Link_Keil_Driver_V3.00.6909 驱动即可建立新唐的MCU工程,注意的是因为新唐MCU是C51 ...

随机推荐

  1. 重新整理 .net core 实践篇 ———— dotnet-dump [外篇]

    前言 本文的上一篇为: https://www.cnblogs.com/aoximin/p/16861797.html 该文为dotnet-dump 和 procdump 的实战介绍一下. 正文 现在 ...

  2. TKK: 更新 TKK 失败,请检查网络连接 idea翻译错误-IDEA翻译失败-Translation用不了

    IDEA 提示:更新 TKK 失败,请检查网络连接 解决方法: 1.进入 C:\Windows\System32\drivers\etc 找到 hosts文件修改 注意:如果用记事本打开不能修改,则修 ...

  3. PHP使用PHPmailer类和smtp发送邮件

    开启邮件smtp服务 设置授权码 引入phpmailer类,smtp类本地下载https://github.com/PHPMailer/PHPMailer //下载PHPMailer并开启php_op ...

  4. JavaWeb实战:基础CRUD+批量删除+分页+条件

    技术栈及相关参考资料: MyBatis基础 Servlet基础 ServletRequest和ServletResponse MVC模式和三层架构 AJAX基础+Axios基础 Vue前端框架 Ele ...

  5. 为什么标准库的模板变量都是inline的

    最近在看标准库里的type_traits的时候发现了个有趣的地方,几乎所有在标准库里的变量模板都是inline的! 不仅常见的实现上(libstdc++.libc++.ms stl)都是inline的 ...

  6. 数电第六周周结_by_yc

    时序逻辑电路的设计要点:   ①只有时钟信号和复位信号可以放在敏感列表里:   ②使用非阻塞赋值,即使用"<=";   ③无需对所有分支进行描述,对于未描述的分支,变量将保持 ...

  7. 【Kafka】Quota配额命令、文档相关概念

    一.多租赁模式基于 Zookeeper和 kafka-configs.sh 管理所有用户 1.步骤 l 基于zookeeper,实现用户管理 l 配置broker认证信息,并进行平滑更新 l 配置cl ...

  8. 瞧瞧别人家的API接口,那叫一个优雅

    前言 在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用. 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性.可重复调用.稳定 ...

  9. 时间片差分调度法-充分利用MCU的资源

    前言 通过该篇学习了嵌入式的任务调度(即时间片论法)后,了解到通过以1ms为调度时间单位轮询判断是否需要执行函数任务,那么下面介绍如何基于时间片论法的任务调度模式充分利用MCU的资源,姑且先称这种方式 ...

  10. java中对象存在形式

    本文主要讲述jvm中对象的存储形式: class Cat{ String name; int age; String color; // 行为 } 依据Cat类创建对象 public class Ob ...