我有一个拥有近10亿行的Amazon Redshift表,并希望随机抽样100000个。我尝试过几乎与
相同的查询select BrowserId,
from PageViews pv
group by BrowserId
order by md5('seed' || BrowserId)
limit 100000;
如here所述,但运行需要两个小时或更长时间,因为排序操作占主导地位。
答案 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;
此外,如果你有很多行并且想要经常进行采样任务,你可以一次性地在一个额外的表列中实现哈希,这样你就不必每次都计算它。