Hive3:数据随机抽样查询

一、适用场景

大数据体系下,在真正的企业环境中,很容易出现很大的表,比如体积达到TB级别。

对这种表一个简单的SELECT * 都会非常的慢,哪怕LIMIT 10想要看10条数据,也会走MapReduce流程,这个时间等待是不合适的。

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

二、实操

1、基于随机分桶抽样

语法

sql 复制代码
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桶数据。
查询结果不变

sql 复制代码
SELECT username, orderId, totalmoney FROM itheima.orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON username);

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

sql 复制代码
SELECT * FROM itheima.orders TABLESAMPLE(BUCKET 1 OUT OF 10 ON rand());

2、基于数据块抽样

语法

sql 复制代码
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


例如

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

注意

使用这种语法抽样,条件不变的话,每一次抽样的结果都一致

无法做到随机,只是按照数据顺序从前向后取。

相关推荐
段一凡-华北理工大学6 分钟前
工业领域的Hadoop架构学习~系列文章22:Hadoop生态展望 - 面向未来的技术演进
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
Nefu_lyh22 分钟前
【Hive】六、Hive 运算逻辑:数学 / 逻辑 / 条件 / 日期 / 字符串函数
数据仓库·hive·hadoop
知识分享小能手1 小时前
Hadoop学习教程,从入门到精通, HDFS分布式文件系统 — 完整知识点与案例代码(3)
hadoop·学习·hdfs
段一凡-华北理工大学20 小时前
工业领域的Hadoop架构学习~系列文章20:故障诊断与根因分析 - 从表象到本质的智能推理
大数据·人工智能·hadoop·学习·架构·高炉炼铁·工业智能体
Francek Chen20 小时前
【大数据处理与分析】MapReduce:05 MapReduce的具体应用
大数据·hadoop·分布式·mapreduce
知识分享小能手1 天前
Hadoop学习教程,从入门到精通, 部署Hadoop 3.x — 知识点详解(2)
大数据·hadoop·学习
AQin10121 天前
【对比向】既生瑜何生亮?不!Hive 和 Doris不一样
数据仓库·hive·hadoop·doris
段一凡-华北理工大学1 天前
工业领域的Hadoop架构学习~系列文章19:能源行业Hadoop应用实践
大数据·人工智能·hadoop·分布式·学习·架构·高炉炼铁
AQin10121 天前
【对比向】细算“成本”——Hive vs. Doris
大数据·数据库·hive·doris·实时数仓
知识分享小能手2 天前
Hadoop学习教程,从入门到精通, 初识Hadoop — 知识点详解(1)
大数据·hadoop·学习