rand() 函数
生成一个0-1之间的随机数,可设定随机种子。
利用这个函数在hive 中进行随机抽样。
test1 简单随机抽样
SELECT t.varx,t.a
FROM(
SELECT varx,rand() a
FROM tablename)t
WHERE t.a BETWEEN 0 AND 0.2
这样就抽取了五分之一的数据。
--或者像这样随机抽取100条数据,与limit结合使用
SELECT distinct a.*
FROM table a
ORDER BY rand(222)
limit 100
test2 数据块取样(Block Sampling)
关键字 TABLESAMPLE
SELECT * FROM table1 TABLESAMPLE (30M)
SELECT * FROM table1 TABLESAMPLE (15 PERCENT)
SELECT COUNT(1) FROM (SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)) x --不懂
SELECT COUTN(2) FROM table1 TABLESAMPLE (BUCKET 1 OUT OF 20 ON RAND()) -- 分桶20抽取第2桶
test3 系统抽样
mod,rand() 依照userrid取模,分5组,每组随机抽取100个用户,实现如:
select *
from(
select refund_id,user_id,mod,rank_num from
(select refund_id,user_id,cast(10+rand()*100 as double) rank_num,
user_id%5 as mod --依据user_id,取模,获取 mod
from table1)
distribute by mod sort by mod,rank_num desc --根据mod分组,并排序
) a
where row_number(mod)<=20; --从每个mod里面抽取20个
test4 分层抽样