在Amazon Redshift中生成可重现的随机样本的最快方法是什么?

时间:2016-07-21 17:04:36

标签: amazon-web-services amazon-redshift

我有一个拥有近10亿行的Amazon Redshift表,并希望随机抽样100000个。我尝试过几乎与

相同的查询
select BrowserId, 
from PageViews pv
group by BrowserId
order by md5('seed' || BrowserId)
limit 100000;

here所述,但运行需要两个小时或更长时间,因为排序操作占主导地位。

1 个答案:

答案 0 :(得分:1)

您可以在哈希数据集中找到前N个符号的唯一组合的分布,如下所示:

select
 substring(md5('seed' || BrowserId) from 1 for 2)
,count(1)
from PageViews pv
group by 1;

然后在WHERE子句中使用相关组合或多个组合来在排序发生之前过滤您的条目。例如,如果您看到> 100000哈希开始于' ab'它看起来像这样:

select [columns]
from PageViews pv
where substring(md5('seed' || BrowserId) from 1 for 2)='ab'
order by md5('seed' || BrowserId)
group by BrowserId
limit 100000;

此外,如果你有很多行并且想要经常进行采样任务,你可以一次性地在一个额外的表列中实现哈希,这样你就不必每次都计算它。