本文分享自华为云社区《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
select c2 from t1 where c1 = #{c1}
规避办法
任选一种既可,推荐第一种,改动小影响小
问题条件:
规避方法:
打破以上任一条件即可规避
点击下方,第一时间了解华为云新鲜技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
#华为云开发者联盟#
更新时间:2024-09-12
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号