百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Hive 分桶表核心知识点(2025年中考英语核心知识点笔记)

wptr33 2025-04-06 22:16 6 浏览

1. Hive 分桶表操作

1.1 数据分桶的定义

分桶是相对分区进行更细粒度的划分。
分桶将整个 hive 表数据内容按照某列属性值的 hash 值进行分区,通过分区将这些表数据划分到多个文件中进行存储。

其实桶的概念就是 MapReduce 分区的概念。物理上每个桶就是目录里的一个文件,一个任务作业产生的桶(即:输出文件)数量和设置的 reduce 任务个数相等。

假设有 hive 表:test_student,按照其字段 s_id 属性分为 3 个桶,那么就是对 s_id 属性值的 hash 值对 3 取模,按照取模结果对数据分桶。如取模结果为 0 的数据记录存放到一个文件,取模为 1 的数据存放到一个文件,取模为 2 的数据存放到一个文件。


1.2 数据分桶的意义

  • 在处理大规模数据集时,在开发和修改查询阶段,可以使用整个数据集的一部分进行抽样测试查询、修改,提高开发效率;
  • 解决单个表文件数据量过大的问题;
  • 分桶表数据进行抽样和 JOIN 时可以提高 MapReduce 程序效率;


1.3 实现分桶的步骤

1.3.1 分桶表功能开启

打开 hive 客户端,在 hive 命令行执行以下命令来开启分桶表功能

#开启分桶表的功能
set hive.enforce.bucketing=true;


1.3.2 设置 Reduce 个数

#设置reduce的个数为3
set mapreduce.job.reduces=3;


1.3.3 创建分桶表

create table student_courses (c_id string, c_name string, t_id string, t_name string)clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

创建分桶表的关键字为:clustered by,来指定表已存在的列名,注意此处指定的列名 c_id 不需要指定其类型,因为是表 student_courses 存在的字段 c_id,已指定其类型为string,因此在分桶时只需指定字段名即可。

指定数字 3 buckets 表示为分 3 个桶,其他关键字与分区表创建含义一致。


1.4 分桶表加载数据

因为分桶表加载数据底层走的是 MapReduce 任务,所以之前讲到过的分区表的加载数据方式:hdfs dfs -put file... 和 load data[local] inpath...均不适用于分桶表的数据加载,因此只能通过 insert overwrite 的方式来加载数据。

具体分为以下三个步骤:

1.4.1 创建普通表

create table tem_student_courses(c_id string, c_name string, t_id string, t_name string)row format delimited fields terminated by '\t';


1.4.2 普通表加载数据

load data local inpath '/user/your_directory_file/student_course.csv' into table tem_student_courses;

此处本地文件 2_test.csv 的内容如下:


1.4.3 分桶表加载数据

#分桶表从普通表中加载数据
insert overwrite table student_courses select * from tem_student_courses cluster by(c_id);

1.4.4 查看桶信息

#查看分桶表的桶信息
hive> dfs -ls /user/hive/warehouse_uat/test.db/student_courses;

从图中可以看出,在 hdfs 里分桶表 student_courses 内容被分成 3 个文件存储,说明分桶成功。


1.4.5 查看分桶数据

#查看分桶表里分桶的数据
hive> select * from student_courses tablesample(bucket 1 out of 3 on c_id);

指定关键字:tablesample


2. Hive 分区表与分桶表的异同点

相同点

1. 分区和分桶都是对数据进行更细粒度的处理,便于数据的管理和开发效率的提升。
2. 都有固定且特有的关键字用于指定是否是分区表或分桶表。


不同点

1.表现形式

分区表:是指按照数据表的某列或某些列分为多个区,形式上可以理解为文件夹,可以是一级文件夹,也可以是多级文件夹,类似于目录。

分桶表:是相对分区进行更细粒度的划分,形式上可以理解为将一个文件的内容按照规则划分成多个文件进行存储,类似于文件。


2.关键字

分区表:使用关键字 partitioned by 标记,指定的分区字段名为:伪列(非表中定义的字段),同时需要指定伪列的字段类型。

分桶表:使用关键字 clustered by 标记,指定的分桶字段名为:真实字段(表中已定义的字段),但不需要指定分桶字段的类型,因为在表定义时字段已指定类型。
但是需要指定桶的个数。


3.数量上

分区表:分区个数创建后后续可以依据需求动态增加
分桶表:桶的个数一旦指定,不能再增加


4.作用上

  • 分区避免全表扫描,根据 where 条件指定分区列来查询指定目录提高查询速度;
  • 分桶保存分桶查询结果的分桶结构(因为数据已经按照分桶字段进行了 hash 散列);
  • 分桶表数据进行抽样和 join 时可以提高 MapReduce 程序效率;

相关推荐

【推荐】一款开源免费、美观实用的后台管理系统模版

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

Android架构组件-App架构指南,你还不收藏嘛

本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...

高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)

使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...

flutter系列之:UI layout简介(flutter ui设计)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

iOS的布局体系-流式布局MyFlowLayout

iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...

WinForm实现窗体自适应缩放(winform窗口缩放)

众所周知,...

winform项目——仿QQ即时通讯程序03:搭建登录界面

上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...

App自动化测试|原生app元素定位方法

元素定位方法介绍及应用Appium方法定位原生app元素...

61.C# TableLayoutPanel控件(c# tabcontrol)

摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...

想要深入学习Android性能优化?看完这篇直接让你一步到位

...

12个python数据处理常用内置函数(python 的内置函数)

在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

Python入门知识点总结,Python三大数据类型、数据结构、控制流

Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...