如何在Redshift SQL中抽取指定时间范围内的10000个随机用户-日期对?
Redshift SQL按user-id抽样及日期范围筛选实现
首先注意你提到的日期范围“2000-01-01至2020-01-01”跨度较大,如果是笔误(比如实际要筛选2020年1月1日当天或某段更窄的范围),直接调整下文的日期条件即可。以下分两种场景给出实现方案:
场景1:随机抽取10000条指定日期范围内的user-id+日期组合记录
如果不需要保证user-id唯一,只是随机选取该日期范围内的10000条记录,可直接用RANDOM()排序后取前10000条:
SELECT user_id, date, other_columns FROM your_table WHERE date BETWEEN '2000-01-01' AND '2020-01-01' ORDER BY RANDOM() LIMIT 10000;
若数据量极大,ORDER BY RANDOM()性能可能不佳,可改用ROW_NUMBER()优化:
SELECT user_id, date, other_columns FROM ( SELECT user_id, date, other_columns, ROW_NUMBER() OVER (ORDER BY RANDOM()) AS rn FROM your_table WHERE date BETWEEN '2000-01-01' AND '2020-01-01' ) sub_query WHERE rn <= 10000;
场景2:先随机抽取10000个唯一user-id,再获取这些用户的指定日期范围记录
如果是要按user-id维度抽样(即选中10000个不同用户,再取他们在目标日期范围内的所有记录),可通过CTE先抽取唯一user-id,再关联原表:
WITH sampled_unique_users AS ( SELECT DISTINCT user_id FROM your_table WHERE date BETWEEN '2000-01-01' AND '2020-01-01' ORDER BY RANDOM() LIMIT 10000 ) SELECT t.user_id, t.date, t.other_columns FROM your_table t JOIN sampled_unique_users s ON t.user_id = s.user_id WHERE t.date BETWEEN '2000-01-01' AND '2020-01-01';
额外说明
- Redshift也支持
TABLESAMPLE语法(如SELECT * FROM your_table TABLESAMPLE BERNOULLI(10)),但这是按比例近似抽样,无法保证精确抽取10000条/个,适合快速预览数据。 - 若目标日期范围是2020-01-01当天,可将
WHERE条件改为date = '2020-01-01'。
内容的提问来源于stack exchange,提问作者titutubs
相关产品推荐
相关产品推荐

