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

注意

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

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

相关推荐
jzy37119 小时前
Hive SQL溯源秘籍:基于YARN Timeline的SQL执行全链路追踪
hadoop·apache hive
Java烘焙师11 小时前
架构师必备:实时对账与离线对账
hive·mysql·架构·对账
让头发掉下来1 天前
Sqoop详细学习文档
大数据·hive·hadoop·hbase·sqoop
非极限码农2 天前
Hive SQL (HQL) 编辑指南
hive·hadoop·sql
非极限码农2 天前
Hive数仓部署/分层/ETL脚本基础指南
数据仓库·hive·hadoop·etl
cici158742 天前
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
java·linux·hadoop
lifallen2 天前
hadoop.yarn 带时间的LRU 延迟删除
java·大数据·数据结构·hadoop·分布式·算法
哈哈很哈哈3 天前
Hadoop JMX 配置的完整文档
大数据·hadoop·分布式
jzy37113 天前
国产化适配鲲鹏arm环境:hive on tez 单节点部署实践总结
linux·hadoop·apache hive
wzy06234 天前
基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(三)
hadoop·impala