热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive如何分桶及抽样查询知识详解+案例实操

Hive分桶表介绍:分区针对的是数据的存储路径;分桶针对的是数据文件。分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定

Hive分桶表介绍 :分区针对的是数据的存储路径;分桶针对的是数据文件。分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。分桶是将数据集分解成更容易管理的若干部分的另一个技术。


1. 数据准备

分隔符为’\t’

1001 liubei
1002 zhangfei
1003 guanyu
1004 caocao
1005 machao
1006 huangzhong
1007 simayi
1008 zhugeliang
1009 zhouyu
1010 zhaoyun
1011 wuguo
1012 shuguo
1013 weiguo
1014 xichuan
1015 mahan
1016 zhaolong

2.创建student表

注意: 我们此时创建的是一张普通表

create table student(
id int,
name string)
row format delimited fields terminated by '\t';

在这里插入图片描述


3. 将数据导入到student表中

load data local inpath '/opt/bigdatacase/hive_data/student.txt' into table student;

在这里插入图片描述


4. 创建分桶表buck_stu

create table buck_stu(
id int,
name string
) clustered by(id) into 4 buckets
row format delimited fields terminated by '\t';

5. 配置相关设置


  • 开启分桶功能

set hive.enforce.bucketing=true;


  • 设置reducer的个数

set mapreduce.job.reduces=-1;

6. 向分桶表中导入数据

说明: 我们创建好分桶表之后不能直接使用load添加数据,添加数据过程要通过MR才能实现数据分桶。

insert into table buck_stu select id,name from student;

在这里插入图片描述
查看数据分桶情况:
在这里插入图片描述


7. 查询分桶表的数据

select id,name from buck_stu;

在这里插入图片描述


抽样查询

应用: 对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive可以通过对表进行抽样来满足这个需求。

tablesample是抽样语句



  • 语法:TABLESAMPLE(BUCKET x OUT OF y)。



  • y必须是 table总 bucket数的倍数或者因子hive根据y的大小,决定抽样的比例。例如,table总共分了4份,当y=2时,抽取(4/2=)2个 bucket的数据,当 y=8时,抽取(4/8=)1/2个 bucket的数据。



  • x表示从哪个bucket开始抽取,如果需要取多个分区,以后的分区号为当前分区号加上y。例如,table总bucket数为4,tablesample(bucket 1 out of 2),表示总共抽取(4/2=)2个bucket的数据,抽取第 1(x)个和第 3(x+y)个 bucket的数据



  • 注意:x的值必须小于等于y的值



  • 例子:从第一个桶开始抽,抽取1个桶的数据



select id,name from buck_stu tablesample(bucket 1 out of 4);

在这里插入图片描述


推荐阅读
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了笔记本电脑上多种实用的快捷键,包括屏幕调整、图形设置、分辨率更改、驱动更新、导航操作、音量控制及屏幕锁定等,旨在帮助用户更高效地使用笔记本电脑。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
author-avatar
无期的囚禁_918
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有