计算哈希列值
背景:如果集群某张表存在分片数据倾斜较大,且又不知道重做表时 使用哪个列较为合适时,
可参考下面方法(但 哈希键 要考虑其 关联查询情况,需综合评估)
(1)、创建用户表--用于保持系统库下集群节点与哈希值对应的nodedatamap
系统表不能与用户表直接关联查询,需要提前将数据保存大用户库下,另外 如果存在数据重分布情况,需要重新导入 gbase.nodedatamap
CREATE TABLE ndty_nodedatamap_0116 (
"hashkey" int(11) DEFAULT NULL,
"nodeid" int(11) DEFAULT NULL,
"data_distribution_id" bigint(8) DEFAULT NULL
) replicated;
(2)、导入系统表数据到用户表
1)、修改参数,其实可以将系统表数据插入到用户表
set _gbase_query_path=1;
2)、将系统表数据插入到用户表中 ,当前用户需有读取 gbase.nodedatamap 表的 select 权限
insert into ndty_nodedatamap_0116 select * from gbase.nodedatamap ;
备注:如果存在数据重分布情况(比如 库容/缩容),需要重新导入 gbase.nodedatamap 数据
3)、修改参数,恢复默认值*/
set _gbase_query_path=0;
(3)、业务表与nodemap表关联,
select nodeid ,count(*)
from ndty_nodedatamap_0116,tablename_xxx t1
where hashkey = crc32(colum_name_xxxx)%65536
group by count(*);
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526