使用Hive随机抽样

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 分层抽样

 

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值