mysql查询 系统表_【gp数据库】查询系统表看表的分布键信息

本文介绍了如何在Greenplum数据库中通过查询系统表来查看表的分布键信息,这对于优化数据分布和提升查询效率至关重要。提供了一个SQL查询示例,用于检查特定模式下所有表的分布键,帮助排查分布不均匀或关联效率问题。
摘要由CSDN通过智能技术生成

Greenplum是关系型的分布式数据库,需要存储的数据库在进入数据库时,将先进行数据分布的处理工作,讲一个表的数据平均分不到每个节点上,并为每个表指定一个分发列(distribute Column),之后根据Hash来分布数据。

本篇介绍查询某模式下所有表的分布键信息,适用于:

排查是否有分布键创建不合理的表,如果分布键是重复率比较高的字段会造成数据分布不均匀,存储过于倾斜。

排查经常做表关联的表是否是相同分布键,这样会提高执行效率。

具体sql如下:

SELECT

aaa.nspname AS "模式名",

aaa.relname AS "表名",

aaa.table_comment AS "中文表明",

ccc.attname AS "分布键"

FROM

(

SELECT

aa.oid,

obj_description (aa.oid) AS table_comment,

aa.relname,

bb.localoid,

bb.attrnums,

regexp_split_to_table(

array_to_string(bb.attrnums, ','),

','

) att,

dd.nspname

FROM

pg_class aa --原数据信息 最重要的表!

LEFT JOIN gp_distribution_policy bb ON bb.localoid = aa.oid --分布键表

LEFT JOIN pg_namespace dd ON dd.oid = aa.relnamespace --模式

LEFT JOIN pg_inherits hh ON aa.oid = hh.inhrelid --继承表

WHERE

dd.nspname = 'dim'  -- 替换成需要的模式

AND hh.inhrelid IS NULL

) aaa

LEFT JOIN pg_attribute ccc ON ccc.attrelid = aaa.oid

AND ccc.attnum = aaa.att

WHERE

ccc.attnum > 0

ORDER BY

aaa.relname ;

运行结果如下:

e97d98fd1ab5274ce570ae6a650209f7.png

修改dim.dim_city_code 表分布键为area_id:

alter table dim.dim_city_code  set distributed by(area_id);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值