GreenPlum如何将数据分成不同的段?

问题描述 投票:0回答:2

我想问一下GreenPlum将其表分成几部分的规则。

它是否将数据均匀地划分为段或根据块大小?

或取决于数据的其他特征。

谢谢!

greenplum
2个回答
1
投票

两种不同的方式。

  1. 分配键

示例:

CREATE TABLE foo
(id int, bar text)
DISTRIBUTED BY (id);

这将在id列中传播数据。您应该选择一列或一组列,这些数据将在数据库中平均分布数据。如果该表很大,并且将其连接到另一个也很大的表,则可能需要使用相同的键来分配两个表。

  1. 随机

示例:

CREATE TABLE foo
(id int, bar text)
DISTRIBUTED RANDOMLY;

这将以随机方式分发数据。将其用于小型表,或者如果该表没有自然键。

您还可以通过使用隐藏列“ gp_segment_id”来查看分发方式。

select gp_segment_id, count(*) from foo group by gp_segment_id order by gp_segment_id;
 gp_segment_id | count 
---------------+-------
             0 |  1654
             1 |  1655
             2 |  1665
             3 |  1661
             4 |  1682
             5 |  1683

0
投票

如果您的分发密钥中有足够不同的值,则您的数据将平均分发。主键或唯一键是很好的选择。

如果您的分配键只有几个不同的值,则具有相同值的每一行都将位于同一段上。那是一个不均衡的分布,某些部分必须完成所有工作,而其他部分将处于闲置状态。

例如:如果您选择性别作为分配键,则通常会得到2-3个值:女性/男性/未知。让我们在这里撇开其他可能的值。在这种情况下,您有2-3个不同的值,并且2-3个不同的段数据库将保存所有行。最坏的情况:这3个段数据库都位于同一物理主机上。

© www.soinside.com 2019 - 2024. All rights reserved.