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

注意

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

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

相关推荐
skywalk816315 小时前
hive —— 多机 AI Agent 协同的任务总线:分布式,多节点同时运行,保障不会宕机
人工智能·hive·分布式
棣廷2 天前
初识Hive(2)
数据仓库·hive·hadoop
skywalk81632 天前
deepseek对skywalk163/hive 和hivecommons/hive 两个多机AI Agent任务调度项目的对比
人工智能·hive·agent
father_12272 天前
【ambari管理下hdp2.6.5升级hive1.2.1-2.1.0-2.3.3】
hive·hadoop·ambari
magic_kid_20103 天前
HDFS 故障复盘:千万级 block 导致 FBR 超过 128 MiB,DataNode 被判定为 dead
大数据·hadoop·hdfs·hadoop 故障
小刘在重生~3 天前
Servlet_day2 (上)|Servlet 整合 JDBC|请求转发 forward|Request 作用域
hive·hadoop·servlet
螺蛳粉 螺蛳粉3 天前
CDH第四篇:CDH 元数据库实战:MySQL 5.7.22 二进制安装 + 三库三账号授权全记录
hive·mysql5.7·centos7·元数据·cdh·oozie·数据库部署
chunyublog4 天前
FinalShell 远程连接 Hadoop 三节点集群教程
大数据·hadoop·分布式
爱吃火鸡面呀4 天前
MySQL、ClickHouse、Doris、Hive、Spark SQL、Flink SQL 选型对比:优点、缺点与面试话术
hive·mysql·clickhouse
ha_lydms5 天前
AnalyticDB MySQL 技术架构
大数据·hadoop·mysql·adb·spark·dataworks·1024程序员节