GBase 8a
运维管理
文章

计算哈希列值

发表于2024-12-30 22:34:5828次浏览0个评论

背景:如果集群某张表存在分片数据倾斜较大,且又不知道重做表时 使用哪个列较为合适时,
          可参考下面方法(但 哈希键 要考虑其 关联查询情况,需综合评估)
             
    
   (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(*);
         
 

评论

登录后才可以发表评论