【问题标题】:how to choosing distribution key in greenplum如何在greenplum中选择分发密钥
【发布时间】:2020-12-15 15:05:25
【问题描述】:

我想知道如何选择每种数据类型不同的分布键的数据类型,我可以使用语句来分布键吗?例如 WHERE,为什么 greenplum 使用分布键,我是否可以使用索引?不一样?

【问题讨论】:

  • 欢迎来到 SO!请阅读游览tourHow to Ask 一个问题。如果您提供更多信息,您更有可能得到有用的答案。

标签: key psql distribution greenplum


【解决方案1】:

一个好的键通常是表中的唯一标识符,它可以是单列或多列。如果您选择一个好的键,每个段的行数将大致相同。

每个客户都有一条记录的客户表将按 customer_id 分发。

create table customer (
customer_id int not null,
customer_name text not null,
customer_address text)
distributed by (customer_id);

您有多个源加载客户表的数据仓库客户表可能有一个描述源的附加列。在这种情况下,customer_id 可能不是唯一的,因为两个不同的来源可能使用相同的 customer_id 来指代不同的客户。因此,您可能有一个如下所示的客户表:

create table customer (
source_id int not null,
customer_id int not null,
customer_name text not null,
customer_address text)
distributed by (source_id, customer_id);

表分布的目标是将数据平均分布到所有Segment上,这样当你查询表时,所有Segment可以并行工作,从而更快地执行查询。

【讨论】:

    【解决方案2】:

    符合以下许多或所有拇指规则的列是很好的数据分布候选者:

    • 在 JOIN (SELECT ... FROM A JOIN B WHERE A.column1 = B.column1) 中经常使用的列
    • 将表行均匀分布在段中的列。列的值越奇异,它们的分布就越优化。以下是要检查的内容:
      • 不同的值;越多越好(与表行数相比)。应该有足够的不同值以允许分发到所有细分市场。
      • 每个值的最大行数;越少越好。
      • 最大行数NULL;越少越好。非常大的数字表示非常大的分布峰值。较大的峰值可能会导致段级别的严重空间消耗问题。
      • 每个值的典型行数;越少越好。定期监测,因为它可能会随着时间而改变。
    • 如果单列无法实现均匀分布,请使用最多两列的多列分布键。额外的列值通常不会产生更均匀的分布,并且在散列过程中需要额外的时间。
    • 如果两列分布键无法实现数据的均匀分布,请使用随机分布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多