我有一个拥有近十亿行的Amazon Redshift表,并想随机抽取100000行。我试过一个查询几乎与

select BrowserId,
from PageViews pv
group by BrowserId
order by md5('seed' || BrowserId)
limit 100000;


here所述,但是由于排序操作在拉取操作中占主导地位,因此要花两个或两个以上的小时。

最佳答案

您可以像这样在哈希数据集中找出前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;


同样,如果您有很多行并且想要频繁执行采样任务,则可以一次又一次地在另一个表列中实现哈希,因此您不必每次都进行计算。

关于amazon-web-services - 在Amazon Redshift中产生可再现的随机样本的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38510299/

10-11 07:54