Hive进阶―抽样的各种玩法
抽样
抽样在Hive 中也是比较常用的一种手段,主要用在下面的几个场景中
一些机器学习的场景中,数仓作为数据的提供方提供样本数据 数据的计算结果异常或者是指标异常,这个时候如果我们往往需要确认数据源的数据是否本身就有异常 SQL的性能有问题的时候我们也会使用抽样的方法区查看数据,然后进行SQL调优 在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。
随Hi机抽样(rand()函数)
我们一般情况下是使用排序函数和rand() 函数来完成随机抽样,limit关键字限制抽样返回的数据,不同之处再有我们使用哪个排序函数呢
利用 rand() 函数进行抽取,这是因为rand() 返回一个0到1之间double 类型的随机值。
下面我们用到了前面我们使用过的一张表大概4603089 条记录,这里我就不给大家准备数据了,大家可以看Hive进阶之数据存储格式来获取测试数据
create table ods_userve_bucket_log( id int, name string, city string, phone string, 进阶 acctime string) CLUSTERED BY (`id` ) INTO 5 BUCKETS row format delimited fields terminated by ' ' stored ―抽as textfile; insert overwrite table ods_user_bucket_log select * from ods_user_log;
order by rand()
order by只会启用一个reduce所以比较耗时,至于为什么我们在前面的文章中解释过了Hive语法之常见排序方式
因为order by 是全局的,所以可以做到随机抽样的样的目的
select * from ods_user_bucket_log order by rand() limit 10;
sort by rand()
sort by 提供了单个 reducer 内的排序功能,但不保证整体有序,这个时候其实不能做到真正的随机的,因为此时的随机是针对分区去的,所以如果我们可以通过控制进入每个分区的数据也是随机的话,那我们就可以做到随机了
select各种 * from ods_user_bucket_log sort by rand() limit 10;
distribute by rand() sort by rand()
rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的,这个时候我们也能做到真正的随机,前面我们也介绍过cluster by 其实基本上是和dis玩法tribute by sort by 等价的
select * from ods_user_bucket_log distribute by rand() sort by rand() limit 10;
cluster by rand()
cluster by 的功能是 distribute by 和 sort by 的功能相结合,distribute by randHi() sort by rand() 进行了两次随机,cluster by rand() 仅一次随机,所以速度上会比上一种方法快
select * from ods_user_bucket_log cluster by rand() limit 10;
tablesample()抽样函数
分桶抽样(桶表抽样)
hive中分桶其实就是根据某一个字段Hash取模,放入指定数据的桶中,ve比如将表table按照ID分成100个桶,其算法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。
分桶抽样语法:
TABLESAMPLE (BUCKET x OUT OF y [ON colname])
其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列(也就是按照那个字段分桶),y表示桶的数量。所以表达的意思是按照colname字段分成y桶,抽取其中的第x桶
SELE进阶CT * FROM ods_user_bucket_log TABLESAMPLE (BUCKET 1 OUT OF 100000 ON rand()) ;
数据块抽样
从 Hive 0.8 开始提供块抽样,使用 tablesampl―抽e 抽取指定的 行数/比例/大小
SELECT * FROM ods_user_data TABLESAMPLE(1000 ROWS); SELECT * FROM ods_user_data TABLESAMPLE (20 PERCENT); SELECT * FROM ods_u样的ser_data TABLESAMPLE(1M);
按比例抽样 ABLESAMPLE (20 PERCENT)
这将允许 Hive 至少获取 n%的数据
SELECT * FROM ods_user_bucket_log TABLESAMPLE(0.0001 PERCENT); 各种;
抽取特定大小的数据TABLESAMPLE(100M)
SELECT * FROM ods_user_bucket_log TABLESAMPLE(1M);
需要注意的是这里必须是整数M ,以为我尝试零点几的时候报错了
抽取特定的行数 TABLESAMPLE(10 ROWS)
SELECT &nbs玩法p; * FROM ods_user_bucket_log TABLESAMPLE(10 rows);
- ·标签: 微元合成 豫鑫糖醇 张其宾 谭瑞清
- ·亚马逊云科技的工业设备预测性维护服务Amazon Lookout for Equipment正式可用
- ·Anthropic 语言模型成网络安全新锐力量:Claude4.5漏洞发现能力实现飞跃
- ·腾讯云向量数据库正式对外全量开放公测
- ·标签: 元保 YB 保险科技 AI保险
- ·奥特曼揭秘隐私新政:承诺ChatGPT与青少年交流时采取谨慎态度
- ·标签: 视源股份 希沃 MAXHUB CVTE
- ·标签: 腾讯云
- ·标签: 中际旭创 光通信模块 财报 2025年
- ·AI+Science:基于飞桨的AlphaFold2,带你入门蛋白质结构预测
- ·想知道SaaS运行好不好?你得读懂这3类分析指标!
- ·标签: 追觅
- ·标签: WPS 金山办公 国产替代 微博热搜
- ·标签: 新基石 腾讯
- ·西湖大学的 AI 科学家 DeepScientist,科研效率大幅提升
- ·Gemini2.5Deep Think成首个ICPC金牌AI,碾压全球精英程序员
- ·https://www.tycoonstory.com/?s=谷歌霸屏技术【tg:seogoogle987】,Gqd
- ·https://www.televes.com/es/catalogsearch/result/?q=谷歌霸屏技术【tg:seogoogle987】,4kc
- ·https://www.pixiv.net/tags/谷歌霸屏技术【tg:seogoogle987】,xsx
- ·https://www.teacherspayteachers.com/Browse/Price-Range/Free/Search:谷歌霸屏技术【tg:seogoogle987】,Fv6
- ·https://www.ncetm.org.uk/search?action=CHECK&q=谷歌霸屏技术【tg:seogoogle987】,thU
- ·https://www.remit.co.jp/vi/?s=谷歌霸屏技术【tg:seogoogle987】OFp
- ·https://www.kubb-tool.bfs.admin.ch/en/search?action=CHECK&q=谷歌霸屏技术【tg:seogoogle987】,VT4
- ·https://www.stonerealestate.com.au/?cat=100&s=谷歌霸屏技术【tg:seogoogle987】,W7n
- ·https://www.lyrics.com/lyrics/谷歌霸屏技术【tg:seogoogle987】,juw
- ·https://www.teamlab.art/fr/?submit=谷歌霸屏技术【tg:seogoogle987】,bQ4
