摘要:用户创建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,语句过滤条件包含所有分布列

规避方法:

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

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

最新文章

  1. PhotoShop算法原理解析系列 - 像素化---》碎片。
  2. CSS 的overflowhidden 属性详细解释
  3. Button四角有弧度及按下显示不同的颜色
  4. &lt;后会无期&gt;经典影评
  5. 单元测试mock之mockito使用
  6. 电赛总结(三)&mdash;&mdash;DA芯片总结
  7. 【Objective-C】2.自定义构造方法和description方法
  8. android的生命周期
  9. 主机windwo7+虚拟机centos如何配置虚拟机可以上网,且与主机互ping通
  10. [TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机
  11. 51Nod 1080 两个数的平方和(数论,经典题)
  12. SQL学习指南第三篇
  13. 基础汇编指令(16bit 32bit 64bit)
  14. Java:Map总结
  15. 无法将文件“..\bin\Debug \**.dll”复制到“bin\**.dll”。对路径“bin \**.dll”的访问被拒绝。
  16. linux(fedora) 第三课
  17. Linux系统下分析内存使用情况的管理工具
  18. element-ui使用导航栏跳转路由用法
  19. mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)
  20. Ubuntu下搭建JAVA开发环境及卸载

热门文章

  1. DevOps 必备的 Kubernetes 安全清单
  2. 我引用中没有Spire.Pdf,但是发现无法解析的“Spire.Pdf”的不同版本之间存在冲突
  3. VS 生成后事件中自动修改文件名插入当前时间
  4. html CheckBox
  5. 基础css样式
  6. node版本管理工具fnm踩坑
  7. Blazor 部署 pdf.js 不能正确显示中文资源解决办法
  8. CGI、WSGI、uWSGI、ASGI……
  9. java中生成随机数
  10. 编译安装nmon