您的位置:首页 > 教育 > 培训 > Hive3:数据随机抽样查询

Hive3:数据随机抽样查询

2024/10/6 9:21:47 来源:https://blog.csdn.net/Brave_heart4pzj/article/details/141260452  浏览:    关键词:Hive3:数据随机抽样查询

一、适用场景

大数据体系下,在真正的企业环境中,很容易出现很大的表,比如体积达到TB级别。
对这种表一个简单的SELECT * 都会非常的慢,哪怕LIMIT 10想要看10条数据,也会走MapReduce流程,这个时间等待是不合适的。

于是,Hive提供了快速抽样的解决办法,可以快速从大表中随机抽取一些数据供用户查看。

二、实操

1、基于随机分桶抽样

语法

SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))

y表示将表数据随机划分成y份(y个桶)
x表示从y个桶中,抽取第x个桶的数据
colname表示随机的依据基于某个列的值,进行分桶
rand()表示随机的依据基于整行,进行分桶


例如
orders表数据,按照username列,根据hash取模,分成10个桶,取第1桶数据。
查询结果不变

SELECT username, orderId, totalmoney FROM itheima.orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON username);

orders表数据,随机分成10个桶,取第1桶数据。
查询结果每次都不同

SELECT * FROM itheima.orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON rand());

2、基于数据块抽样

语法

SELECT ... FROM tbl TABLESAMPLE(num ROWS | num PERCENT | num(K|M|G));

num ROWS 表示抽样num条数据
num PERCENT 表示抽样num百分百比例的数据
num(K|M|G) 表示抽取num大小的数据,单位可以是K、M、G表示KB、MB、GB


例如

-- 抽取100条
select * from itheima.orders tablesample(100 rows);-- 取1%数据
select * from itheima.orders tablesample(1 percent);-- 取 1KB数据
select * from itheima.orders tablesample(1K);

注意
使用这种语法抽样,条件不变的话,每一次抽样的结果都一致
无法做到随机,只是按照数据顺序从前向后取。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com