我有几个表,其中包含字段customer_id。
customer_id并不多,但是基础数据很大(每个客户ID 100s Gb)。
我所有的查询始终以一种或另一种方式使用此customer_id:连接,聚合或过滤。
因此,此字段似乎是分发密钥的最佳候选者。
问题:如果我在所有表上都设置了相同的DISTRIBUTION KEY(customer_id),redshift会知道我想要所有这些表在同一节点上的特定客户的数据吗? 如果是,它将如何决定?只需通过在所有这些表中使用相似的列名? 在我看来,这很奇怪,但是我找不到关于该主题的任何信息。
答案 0 :(得分:0)
Amazon Redshift将散列在DISTKEY
列中的值。
例如,如果您的集群总共有4个分片,它将散列键并使用4的模。这将导致任何值为0-3的值。然后,它将使用该值将这些行分布在特定的切片上。
如果节点数(进而是切片)发生了变化,则将为每一行重新计算哈希值。
永远记住基本规则:
DISTKEY
设置为最常用的列SORTKEY
设置为WHERE
中最常用的列