Greenplum之分布键

2023-03-23 00:00:00 查询 数据 执行 复制 分布

复制表和有分布键的表
复制表:常用于小表。每个节点上都有完整一份
分布键表:按照分布键进行hash分布或随机分布,使得数据较均匀地分布在每个节点上,并在后续join时减少数据传输。

分布键
hash分布
distributed by (my_column)
随机分布
distributed randomly
查看数据分布
要查看一个表中行的数据分布(每个Segment上的行数),可以运行一个这样的查询:

SELECT gp_segment_id, count(*)
FROM table_name GROUP BY gp_segment_id;

如果所有的Segment都有大致相同的行数,一个表就可以被认为是分布均匀的。
Note:
如果在复制表上运行该查询会执行失败,因为Greenplum数据库不允许用户查询复制表的gp_segment_id 系统列数
据。由于每个Segment上都有一份完整的表数据,复制表必然是均匀的。

检查查询过程倾斜
当一个查询被执行时,所有的Segment应该具有等量的负载来保证好的性能。如果发现了一个执行性能低下的查
询, 可能需要使用EXPLAIN命令进行深入研究。有关使用EXPLAIN命令和查询 分析的信息,请见查询分析.
如果表的数据分布策略与查询谓词没有很好地匹配,查询执行负载可能会倾斜。要检查执行倾斜,可以运行一个这样
的查询:

SELECT gp_segment_id, count(*)
FROM table_name
WHERE column='value' GROUP BY gp_segment_id;

这将显示对于给定的WHERE谓词,Segment会返回的行数。
如查看数据分布所说的, 该查询在复制表上运行时也会报错,因为在复制表上查询的 gp_segment_id列不具有参考
价值。


本文来源:https://blog.csdn.net/nituoge/article/details/127874713

相关文章