[英]Selecting sortkeys and distkeys for an AWS Redshift table with WHERE and GROUP BY
给出这样的查询
with
user_id, aggregate metrics
from
table
where
date < end_time and date >= start_time
group by
user_id
我的 sortkey 和 dist key 应该是什么?
根据我在网上阅读的文章, date
的排序键最有意义,因为我们需要过滤掉不相关的数据。 但我不确定如何/是否可以通过将user_id
添加到 sortkey 或 distkey 来优化 user_id 上的分组。
将user_id
添加到 distkey 的一个潜在问题是,由于该列中的分布严重不均匀,某些节点可能需要更长的时间并最终增加查询所用的时间。
您的排序关键标准听起来是正确的。 请注意,查询中的“start_time”和“end_time”需要是文字日期或时间戳值,以便查询优化器利用表元数据进行初始过滤。 还需要分析该表,以便元数据有效。
至于分布键,您可以寻找其他列,这些列可以在表倾斜方面充当更好的分布键,但仍与 user_id 关联良好以提供性能优势。 如果不存在,你可以做一个——当它足够重要时,我已经为客户做了几次。 这是如何发挥作用的一个例子:
而已。 定义一个列,将每个 user_id 值保存在单个切片上,并使表保持均匀分布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.