当加载数据到Redshift表时,Redshift根据表的distribution类型,把数据导入到每个分片上。
当执行查询时会根据查询类型做数据的重新分布或拷贝,因为有些join查询需要其他表的所有数据,这样一来肯定带来额外的I/O和网络负载,影响到整体的系统性能。这是也data redistribution
的目的:
原数据大小 x 节点数量
, 而且在加载、更新、插入数据时会花更多的时间。它适合比较稳定(不会频繁更新)的表。对于小表,即使进行redistribute对IO性能也影响较小,所以小表没必要设置成DISTSTYLE ALL
Key distribution时,两个表中列的相同值都会分布到同一个slice,例如product_shipping
和product_orders
两张表都有order_number
这一列,它们会在一起做join操作,则它们order_number
中相同的值会分布到同一个slice:
如果不用key distribution
, 在join操作时需要跨slice进行复制,带来额外的IO成本:
round robin
分布到每个slice