【发布时间】:2020-12-15 15:05:25
【问题描述】:
我想知道如何选择每种数据类型不同的分布键的数据类型,我可以使用语句来分布键吗?例如 WHERE,为什么 greenplum 使用分布键,我是否可以使用索引?不一样?
【问题讨论】:
-
欢迎来到 SO!请阅读游览tour 和How to Ask 一个问题。如果您提供更多信息,您更有可能得到有用的答案。
标签: key psql distribution greenplum
我想知道如何选择每种数据类型不同的分布键的数据类型,我可以使用语句来分布键吗?例如 WHERE,为什么 greenplum 使用分布键,我是否可以使用索引?不一样?
【问题讨论】:
标签: key psql distribution greenplum
一个好的键通常是表中的唯一标识符,它可以是单列或多列。如果您选择一个好的键,每个段的行数将大致相同。
每个客户都有一条记录的客户表将按 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可以并行工作,从而更快地执行查询。
【讨论】:
符合以下许多或所有拇指规则的列是很好的数据分布候选者:
SELECT ... FROM A JOIN B WHERE A.column1 = B.column1) 中经常使用的列NULL;越少越好。非常大的数字表示非常大的分布峰值。较大的峰值可能会导致段级别的严重空间消耗问题。【讨论】: