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);

注意

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

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

相关推荐
武子康1 天前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端
仗剑_走天涯2 天前
zookeeper 安装与配置
hadoop·zookeeper
zhixingheyi_tian2 天前
hdfs.c 之解析
c语言·hadoop·hdfs
武子康3 天前
大数据-262 实时数仓 - Canal 同步数据实战指南 实时统计
大数据·hadoop·后端
武子康4 天前
大数据-261 实时数仓-建设指南:从架构设计到业务落地 交易订单、订单产品、产品分类、商家店铺、地域组织表
大数据·hadoop·后端
J2虾虾5 天前
Hadoop入门
大数据·hadoop·分布式
橘子编程5 天前
Hive大数据实战指南:从入门到精通
大数据·hive·hadoop
仗剑_走天涯5 天前
hadoop 执行mr任务出现找不到主类或无法加载主类解决方案
hadoop·mr
橘子编程6 天前
Apache Hadoop知识全解析
大数据·hive·hadoop·apache
dovens6 天前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot