问题描述(举例):
表结构(students_article):
student_id, article
id_1,article_1
id_1,article_2
id_1,article_3
id_2,article_4
id_2,article_5
hive sql 取某个表中某个班级每个学生的随机5篇作文
方案:
order by与rand函数结合
千万级数据中进行随机抽样,PARTITION BY进行分组,组内使用rand()函数进行随机抽样,order by方式全局排序,rn关键字限制抽样返回的数据量。
SELECT *
FROM (
SELECT student_id, regexp_replace(article, '\t', '') AS article
, ROW_NUMBER() OVER (PARTITION BY student_idORDER BY rand()) AS rn
FROM database_name.students_article
WHERE d = '2022-08-10'
)
WHERE rn <= 5