直接从Hive 表中数据抽样-Sample

本文介绍了Hive中两种常见的抽样方法:随机分桶抽样与数据块抽样。随机分桶抽样通过BUCKET n OUT OF m ON rand()实现,而数据块抽样则使用TABLESAMPLE(n PERCENT)来抽取指定百分比的数据。此外,还分享了一种避免头部用户数据采样偏差的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中会遇到需要对一个大型表中的数据进行取样分析的问题,并不需要去跑mapreduce来取样,hive表中本身就提供了取样的相关函数。本文是对遇到的hive表中抽样问题,进行一个记录。

随机分桶抽样:

TABLESAMPLE (BUCKET 1 OUT OF 40 ON rand())

SELECT *
FROM tabelName1 TABLESAMPLE (BUCKET 1 OUT OF 40 ON rand())
WHERE column1='20210220' and column2='pagev'

上面的含义是从tabelName1表中选取满足where条件的数据中,按分桶随机抽样取1/40的数据。(得到的数据大概是符合条件数据的1/40,但是并不是严格的1/40).

 

数据块抽样

TABLESAMPLE (n PERCENT)

SELECT *
FROM mds_feature_project_sample_data_hour TABLESAMPLE (10 PERCENT)
WHERE dt='20210220' and cre_mod='tianyi_nspagev'

从符合where条件筛选的数据中抽取百分之10的数据。

 

参考:

http://lxw1234.com/archives/2015/08/444.htm

 

经验: 目的是随机抽取2.5d的日志数据,如果以TABLESAMPLE (BUCKET 20 OUT OF 100 ON uuid_sign)去采用容易导致数据采样有偏,对于头部用户(uuidsign)的数据处理要么过于倾向要么严重忽略,得出的结论并不可信,还是需要以记录条数去随机采样更可信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值