postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个

Posted

技术标签:

【中文标题】postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个【英文标题】:postgresql partition large dataset and random select 3 from a category 【发布时间】:2016-02-03 10:30:51 【问题描述】:

我是数据库编程或一般编程方面的新手。 但我希望你能帮助我。

我有一个大约有 900 万行的数据库,并且有一个名为 category 的列。有些行属于同一类别,可能有 10 行,而其他行可能只有 1 或 2。

我想创建一个新表,其中从同一类别中随机选择三行。基本上过滤或排除其余部分。

如果有少于 3 行的类别,则只会选择可用的行。

我在论坛上环顾四周,一位朋友告诉我,我需要使用 PARTITION 执行此操作。我尝试了以下方法,但这并没有达到我想要的效果。非常感谢任何帮助。

Create table test as
SELECT * 
FROM (
SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
FROM data2016 ) sub
WHERE rn = 1;

【问题讨论】:

改成where rn <= 3 不敢相信这么简单。非常感谢它的工作。 作为答案发布 【参考方案1】:

大概:

SELECT * 
FROM (
    SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
    FROM data2016
  ) sub
WHERE rn <= 3;

【讨论】:

以上是关于postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark 使用 SQL 函数 nTile 对数据进行分区

通过 PostgreSQL 数据库聚合大型(数十亿行)数据集

为大型数据集生成 ngram 频率

为大型 Postgresql 表优化嵌套连接窗口函数

使用 pyspark 对 parquet 文件进行分区和重新分区

在 SQL Server 中对大型表进行分区的最佳方法是啥?