GaussDB(DWS)现网案例:collation报错
摘要:用户创建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报错的更多相关文章
- 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法
一开始进入系统显示reboot and select proper boot device or insert boot media in selected boot device and press ...
- 映射内网ftp服务器到公网报错问题解决
这两天公司测试环境有个需求要让合作方通过ftp推送数据,一般内网环境是不会对公网开放ftp服务的,但是因为是临时需求就帮着搭了ftp服务,并且做了公网映射.ftp服务搭好之后在内网访问正常,但是在公网 ...
- angular 官网英雄案例 报错整理
1.导入of 报错 import { of } from 'rxjs/observable/of'; 2. 服务注入报错 在app.module.ts引入 3.使用angular-in-memory- ...
- 新网注册域名如何转向其他(如花生壳)DNS(不会报错,已经转入成功)
最近在玩域名,发现相比较来说,新网的域名注册费用相对廉价好多. 但是我以前是用花生壳的,用惯了花生壳,就觉得新网的域名管理界面很不适应,并不是新网的不好,而是习惯了花生壳. 那么如何将新网注册的域名D ...
- 案例:Oracle报错ASM磁盘组不存在或没有mount
案例:Oracle报错ASM磁盘组不存在或没有mount 环境:RHEL 6.5 + Oracle Standby RAC 11.2.0.4 我做Standby RAC实验时,在恢复控制文件时,报错无 ...
- struts项目部署在Tomca上在断网情况下启动报错
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6015693.html 前段时间,项目部署到现场后,反馈Tomcat能正常启动,但是项目有时访问不了也不报错. ...
- 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,& ...
- 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)
无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...
- plsql excel导入报错:未发现数据源名称并且未指定默认驱动程序
1.情景展示 使用plsql的odbc导入器,导入excel数据时,报错信息如下: anydac 未发现数据源名称如何处理 2.原因分析 操作系统的问题,我的是64位的系统,plsql支持32 ...
- KEIL建立新唐MCU的工程时,移植官网程序报错变量未定义问题解决方法
最近在使用新唐的MCU,新唐的MCU使用还算方便,你安装好KEIL之后再安装 Nu-Link_Keil_Driver_V3.00.6909 驱动即可建立新唐的MCU工程,注意的是因为新唐MCU是C51 ...
随机推荐
- 聊聊GPU与CPU的区别
目录 前言 CPU是什么? GPU是什么? GPU与CPU的区别 GPU的由来 并行计算 GPU架构优化 GPU和CPU的应用场景 作者:小牛呼噜噜 | https://xiaoniuhululu.c ...
- 部署redis集群
1.redis部署 redis单实例部署参考:https://www.cnblogs.com/silgen/p/16537299.html 版本:6.2.7 集群:6个节点(redis集群至少3个节点 ...
- 1742C
题目链接 题目大意: 在一个8x8的方格中你每次可以将一行全部涂成红色或者将一列涂成蓝色.问最后一次操作是什么操作: 如果是行操作就输出R 如果是列操作就输出B 解题思路: 我们可一枚举每行每列,如果 ...
- 基于SpERT的中文关系抽取
SpERT_chinese 基于论文SpERT: "Span-based Entity and Relation Transformer"的中文关系抽取,同时抽取实体.实体类别和关 ...
- springboot接收前端传参的几种方式
1.通过HttpServletRequest接收,常用于获取请求头参数以及Cookie,适用于GET 和 POST请求方式,以下两种方式: @GetMapping("/demo1" ...
- Forest + IDEA = 双倍快乐!ForestX 隆重登场
Forest + IDEA = 双倍快乐!ForestX 隆重登场 Forest 是一款声明式的 Java 开源 HTTP 框架,相比它的前辈 Httpclient 和 OkHttp 更简明易懂.也更 ...
- 常用函数/异常处理/for循环本质
常用内置函数 1,map() - 映射 格式: map(函数,可遍历对象) 指将遍历的元素挨个取出来做函数的行参传参,得到的返回值全部放回map工厂中,map工厂可以被转换成列表查看到 每一个被函数处 ...
- [数学建模]层次分析法AHP
评价类问题. 问题: ① 评价的目标? ② 可选的方案? ③ 评价的指标? 分层 目标层.准则层.方案层 层次分析法可分为四个步骤建立: 第一步:标度确定和构造判断矩阵: 第二步:特征向量,特征根计算 ...
- Go语言Golang DevOps运维开发实战
Go语言Golang DevOps运维开发实战 提高运维意识.从下到上,从上到下的工作都要做好,对上运维工作的价值和含金量可以得到认可,对下我们的工作能够提高效率解放运维.运维意识是很重要,并不是你技 ...
- PyTorch复现GoogleNet学习笔记
PyTorch复现GoogleNet学习笔记 一篇简单的学习笔记,实现五类花分类,这里只介绍复现的一些细节 如果想了解更多有关网络的细节,请去看论文<Going Deeper with Conv ...