Hive进阶—抽样的各种玩法

Hive中的抽样主要用于机器学习场景、数据源异常检查、SQL性能优化和大规模数据分析。通过`ORDER BY RAND()`结合`LIMIT`实现随机抽样,但全局排序可能消耗较多资源。抽样能有效减少计算成本,提高效率。示例展示了如何从一个包含约460万条记录的表中进行随机抽样。
摘要由CSDN通过智能技术生成

抽样

抽样在Hive 中也是比较常用的一种手段,主要用在下面的几个场景中

一些机器学习的场景中,数仓作为数据的提供方提供样本数据
数据的计算结果异常或者是指标异常,这个时候如果我们往往需要确认数据源的数据是否本身就有异常
SQL的性能有问题的时候我们也会使用抽样的方法区查看数据,然后进行SQL调优
在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。

随机抽样(rand()函数)

我们一般情况下是使用排序函数和rand() 函数来完成随机抽样,limit关键字限制抽样返回的数据,不同之处再有我们使用哪个排序函数呢

利用 rand() 函数进行抽取,这是因为rand() 返回一个0到1之间double 类型的随机值。

下面我们用到了前面我们使用过的一张表大概4603089 条记录,这里我就不给大家准备数据了,大家可以看Hive进阶之数据存储格式来获取测试数据

create table ods_user_bucket_log(
id int,
name string,
city string,
phone string,
acctime string)
CLUSTERED BY (id ) INTO 5 BUCKETS
row format delimited fields terminated by ‘\t’
stored as textfile;
insert overwrite table ods_user_bucket_log select * from ods_user_log;

SQL
order by rand()

order by只会启用一个reduce所以比较耗时,至于为什么我们在前面的文章中解释过了Hive语法之常见排序方式

因为order by 是全局的,所以可以做到随机抽样的目的

select * from ods_user_bucket_log order by rand() limit 10;

更多请见:http://www.mark-to-win.com/tutorial/52270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值