抽样
抽样在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;