大数据从入门到精通(超详细版)之Hive的抽样查询与虚拟列,你没见过的Hive玩法!

前言

嗨,各位小伙伴,恭喜大家学习到这里,不知道关于大数据前面的知识遗忘程度怎么样了,又或者是对大数据后面的知识是否感兴趣,本文是《大数据从入门到精通(超详细版)》的一部分,小伙伴们如果对此感谢兴趣的话,推荐大家按照大数据学习路径开始学习哦。

以下就是完整的学习路径哦。

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

大数据从入门到精通文章体系!!!!!!!!!!!!!!

↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

推荐大家认真学习哦!!!

上一篇文章我们已经讲了Hive的DQL操作,学习了Hive的基础查询语句,学习了Hive的Union和Join查询,同时也学习了正则表达式的使用,今天我们来学习Hive的高阶的抽样查询数据和虚拟列的使用。

在这里插入图片描述

数据抽样

为什么要进行数据抽样

对表进行随机抽样是非常有必要的。

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

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

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

在Hive中,抽样表数据是为了在大规模数据集上进行快速预览和分析,而无需处理整个数据集。抽样可以带来以下好处:

  1. 加速查询速度:对于大型数据集,对整个数据集进行查询可能会非常耗时。通过在抽样数据上进行查询,可以加速查询速度,提供更快的结果响应时间。
  2. 节省计算资源:处理大规模数据集需要消耗大量的计算资源和存储空间。通过抽样表数据,在处理阶段只需处理部分数据,从而节省了计算资源和存储成本。
  3. 快速数据探索:对于未知的数据集,抽样表数据可以用于快速了解数据的特征、分布和结构。通过对抽样数据进行可视化、汇总和统计分析,可以帮助我们更好地理解和探索整个数据集。
  4. 测试和调试:在开发和测试阶段,抽样表数据可以作为样本数据,用于验证查询逻辑、调试代码和评估性能。这可以在处理高成本操作之前进行快速迭代和验证。

基于桶抽样

进行随机抽样,本质上就是用TABLESAMPLE函数

基于 随机分桶抽样 的语法:

SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))
  • y表示将表数据随机划分成y份(y个桶)
  • x表示从y里面随机抽取x份数据作为取样
  • colname表示随机的依据基于某个列的值
  • rand()表示随机的依据基于整行

例子:

从我们之前的orders表当中抽出3个数据。

select username, orderId, totalMoney
from orders tablesample (bucket 3 out of 10 on username);
  • bucket 3 out of 10 : 10个桶里面抽取三个值
  • on username: 对username进行hash取模,这个值一旦计算,就是固定的。
  • 如果此时这张表分桶是按照username进行分桶的话,那么这个根据列的抽样的速度将会非常快。
select username, orderId, totalMoney
from orders tablesample (bucket 3 out of 10 on rand());
  • on rand() : 这个rand()就会导致每次运行的结果一直发生变化

基于块抽样

语法:

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

注意:

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

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

例子,抽取100条数据:

select * from orders tablesample ( 100 rows );

并且这条命令不论执行多少次,条件不变,结果就不会改变。

在这里插入图片描述

例子,取1%的数据

select * from orders tablesample ( 1 percent );

在这里插入图片描述

例子,取1KB大小的数据

select * from orders tablesample(1K);

在这里插入图片描述

虚拟列

什么是虚拟列

Hive的虚拟列(Virtual Columns)是一种特殊类型的列,它们不是存储在表中的实际列,而是根据表的其他列及其元数据计算得出的。虚拟列可以用于提供对表数据的额外元信息或在查询中进行运算和转换。

Hive中常见的虚拟列包括:

  1. INPUT__FILE__NAME:这是一个隐含的虚拟列,它代表当前处理的输入文件的名称。它可以在查询中使用,以了解数据来自哪个文件或文件路径。
  2. BLOCK__OFFSET__INSIDE__FILE:这是另一个隐含的虚拟列,它表示当前行在其所在文件中的字节偏移量。它通常与INPUT__FILE__NAME一起使用,以获得更详细的位置信息。
  3. ROW__ID:这是虚拟列,它提供每一行的唯一标识符。ROW__ID的值由底层存储格式决定(如Parquet或ORC),它可以作为行级别的唯一标识符或排序依据。
  4. 分区列(Partition Columns):当表使用分区时,分区列本身就是一种虚拟列。分区列可用于过滤和查询特定分区的数据,以及将数据映射到相应的分区。

实际操作

语法

我们拿前篇文章的course表举例:

SELECT *, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM course;

注意:

==ROW__OFFSET__INSIDE__BLOCK 这个虚拟列需要我们开启SET hive.exec.rowoffset=true==这个命令才能显示出来,不然执行报错。

在这里插入图片描述

虚拟列是可以参与计算,参数where , group by 等等条件查询。

以上就是Hive的数据抽样与虚拟列的学习了,我们下一篇文章学习函数。

结尾

恭喜小伙伴完成本篇文章的学习,相信文章的内容您已经掌握得十分清楚了,如果您对大数据的知识十分好奇,请接下来跟着学习路径完成大数据的学习哦,相信你会做到的~~~

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

大数据从入门到精通文章体系!!!!!!!!!!!!!!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木 木 水.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值