声明:文中观点为作者的个人观点、不代表官方、如需更多帮助,请联系Pivotal官方·转载必须注明出处
用过GP的都清楚GP是一个并行数据仓库系统,数据是分散在不同的instance(磁盘|目录)的,这种架构
很多时候我们必须小心注意数据的分布情况,包括instance上的平坦性,以及partition上的平坦性,如果
数据集中在少数instance上,那么我们的分布策略是低效的甚至是失败的,如果分布在个别的partition上,
那么我们的分区策略是低效的或者失败的,当然人为生成的测试数据不在其列。
很多时候我们很想知道数据到底是怎么分布的:
关于instance的标识,GP的table中包含一个隐藏字段gp_segment_id,其在gp_segment_configuration中
有详细定义信息,该字段标识了数据在哪个instance上存储。
于是我们可以使用这样的语句来查看数据在instance上的分布情况:
select gp_segment_id,count(*) fom $tablename group by 1 order by 1;
关于partition的标识,我们没有太好的办法,GP基于Postgresql而来,在GP中partition表实现了类似PG
中的inherits,在parent级别的表中并没有存储实际的数据,实际数据是存储在最低层定义的表中的,也就是
我们最关心的底层分区表,这样我们就可以用表信息包含的一个隐藏字段tableoid来区分数据来自不同的分区
表了,比如:
select tableoid::regclass,count(*) from $partitiontablename group by 1 order by 1;
还可以将两者结合使用:
select gp_segment_id,tableoid::regclass,count(*) from $partitiontablename group by 1,2 order by 1,2;
声明:文中观点为作者的个人观点、不代表官方 、如需更多帮助,请联系Pivotal官方 ·转载必须注明出处
声明:文中观点为作者的个人观点、不代表官方 、如需更多帮助,请联系Pivotal官方 ·转载必须注明出处
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11022757/viewspace-719840/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11022757/viewspace-719840/