greenplum表的distributed key值查看
greenplum属于分布式的数据库,MPP+Share nothing的体系,查询的效率很快.不过,这是建立在数据分散均匀的基础上的.如果DK值设置不合理的话,完全有可能出现所有数据落在单个节点上的情况,这就体现不出优势来.因此,DK值的设置是否合适是建表的时候,需要考虑的重要因素之一.
查看表(table_name)的数据在节点的分布情况:
select gp_segment_id,count(*) from table_name group by gp_segment_id;
如果数据有严重倾斜的话,即某些节点的数据量过大,表示DK值需要重新调整.调整语句为alter table table_name set distirbuted by(col1,col2,...);
现在有个问题是:如何发现哪些DK值设置不合理的表呢?可以参照之前写的文章:数据分布查看,执果索因调整
这里介绍的是如何把DK值展现出现,一般设置单列(该列为日期类型,每天一份的话)的表,就很有可能出现DK值不合理的情况。我们需要利用到三张表:
pg_class --object属性表,relkind表示object属性,'r'代表table
pg_attribute --展现详细的列
gp_distribution_policy --存储DK值
首先,创建一个类型,用来显示function的结果集.
create type dk_table_type as
(
table_name varchar,
dk_cols varchar
);
然后,用上面三张表组合起来,得到相应的所需要的结果信息.
CREATE OR REPLACE FUNCTION get_table_dk()
RETURNS SETOF dk_table_type AS
$BODY$
DECLARE
v_cur_tb cursor for
select d.nspname||'.'||a.relname,b.attname
from
pg_class a
inner join
pg_attribute b
on a.oid=b.attrelid
inner join
gp_distribution_policy c
on a.oid=c.localoid
inner join pg_namespace d
on a.relnamespace=d.oid
where a.relkind='r' and b.attnum=any(c.attrnums)
order by d.nspname||'.'||a.relname,b.attname,b.attnum;
v_tb varchar(500):='';
v_tb_new varchar(500):='';
v_dk_col varchar(100):='';
v_dk_cols varchar(1000):='';
v_record dk_table_type;
BEGIN
open v_cur_tb;
loop
fetch v_cur_tb into v_tb_new,v_dk_col;
if not found THEN
exit;
end if;
if v_tb = '' and v_dk_cols = '' then
v_tb := v_tb_new;
v_dk_cols:=v_dk_col;
ELSEIF v_tb <> v_tb_new THEN
select v_tb,v_dk_cols into v_record;
return next v_record;
v_tb := v_tb_new;
v_dk_cols:=v_dk_col;
ELSE
v_dk_cols:=v_dk_cols||','||v_dk_col;
end if;
end loop;
select v_tb,v_dk_cols into v_record;
return next v_record;
close v_cur_tb;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
然后,执行select * from get_table_dk()就可以获得表以及其对应的DK值(列),从而可以直观的发现是否有些表需要调整,此时就用上面的gp_segment_id来验证.如果是的话,就进行相应的调整.
greenplum表的distributed key值查看的更多相关文章
- linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”
计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...
- 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个数然后输入成对的index和value值 ...
- OVS 内核KEY值提取及匹配流表代码分析
原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...
- Cassandra二级索引原理——新创建了一张表格,同时将原始表格之中的索引字段作为新索引表的Primary Key,并且存储的值为原始数据的Primary Key,然后再通过pk一级索引找到真正的值
1.什么是二级索引? 我们前面已经介绍过Cassandra之中有各种Key,比如Primary Key, Cluster Key 等等.如果您对这部分概念并不熟悉,可以参考之前的文章: [Cassan ...
- 数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出
此题如果直接使用有序的TreeMap就不需要这样折腾: 1.map的key值唯一性,故就不在需要set集合来去重 2.使用map后利用key的唯一性,把序列号相同的数据直接加在一起,代码会很简洁 pa ...
- Greenplum 表空间和filespace的用法
转载:https://yq.aliyun.com/articles/190 Greenplum支持表空间,创建表空间时,需要指定filespace.postgres=# \h create table ...
- SQL Server表分区的NULL值问题
SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...
- EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值. 下面我们通过例子来展示,EF ...
- 删除带外键的表【foreign key constraint fails】报错
title: 删除带外键的表[foreign key constraint fails]报错 date: 2018-08-02 21:59:06 tags: 数据库 --- 遥想当时正在学hibern ...
随机推荐
- 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量
建议133:用camelCasing命名私有字段和局部变量 私有变量和局部变量只对本类型负责,它们在命名方式也采用和开放的属性及字段不同的方法.camelCasing很适合这类命名. camelCas ...
- [你必须知道的异步编程]——异步编程模型(APM)
本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中 介绍了从C#1.0——C#4.0中一 ...
- APUE(8)---进程控制(1)
一.进程标识 每个进程都有一个非负整型标识的唯一进程ID.因为进程ID标识符总是唯一的,常将其用做其他标识符的一部分以保证其唯一性.进程ID虽然是唯一的, 但是却是可以复用的.ID为0的进程通常是调度 ...
- SPARK_sql加载,hive以及jdbc使用
sql加载 格式 或者下面这种直接json加载 或者下面这种spark的text加载 以及rdd的加载 上述记得配置文件加入.mastrt("local")或者spark://m ...
- 第六周—Alpha阶段项目复审(五饭来了吗)
第六周--Alpha阶段项目复审(五饭来了吗) 以下部分排名只是个人观点: 小组 优点 缺点,bug报告 名次 中午吃啥队 较完整的团体结构,可提供给商家和用户 感觉界面再优化一下就很棒了 1 天冷记 ...
- Dubbo RPC源码解读
https://yq.aliyun.com/articles/272405#27 本文代码摘录的时候,将一些与本流程无关的内容去掉了,如有需要请看源码. 一.闲言碎语 使用rpc框架已经多年了,虽然之 ...
- java学习(七)java中抽象类及 接口
抽象类的特点: A:抽象类和抽象方法必须用abstract关键字修饰. B:抽象类中不一定有抽象方法,但是抽象方法的类必须定义为抽象类 c: 抽象类不能被实例化,因为它不是具体的. 抽象类有构造方法, ...
- MongoDB 主从复制 的设置
今天我们主要讨论mongodb的部署技术. 我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署, 如果碰到数据库宕机 ...
- Backup--批量备份和还原
-----------------------------批量备份数据------------------------------------------- Use master GO /*===== ...
- solr7.3集群搭建
solr集群搭建 原博客:https://blog.csdn.net/gdsgdh308227363/article/details/81004706 注意,在搭建solr集群前,建议最好有一个sol ...