DW表的记录有两种分布策略,分别是哈希分布(DISTRIBUTED BY(key))和随机分布(DISTRIBUTED RANDOMLY)。如果不指定分布策略默认使用哈希分布,并且选择primary key或者第一个column。
在MPP环境下,查询的执行时间是由所有节点决定的。当数据出现倾斜时,会导致较低的性能以及内存溢出的情况。
当选择分布键时,考虑以下几个方面:
为所有的表显示地指定哈希或随机分布,不要使用默认的。
理想的情况下,使用一个可以将数据均匀分布在各个节点上的字段作为分布键。
不要选择可能出现在WHERE子句的字段作为分布键。
不要选择时间或时间戳类型的字段作为分布键。
作为分布键的字段的值应具有唯一性或非常高的散列程度。
如果单个字段无法达到平均分布,使用多个字段作为分布键,但不要超过两个。
如果两个字段作为分布键仍无法达到平均分布,考虑使用随机分布。
常做join操作的大表之间,选择相同的字段作为分布键(字段的顺序也要一样)。作为分布键的字段数据类型也要一致(虽然不同数据类型的某些值是一样的,但是它们的存储方式不同,哈希之后的值会不一样,因而会分布到不同的节点上)。