关于HIVE的分区与分桶

news/2024/11/8 15:03:29/

1.分区

1.概念

Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多
个人理解白话:按表中或者自定义的一个列,对数据进行了group by, 然后这时候,查询出的一行就是一个文件,或者说,分区列一行对应一个文件

本质是MR中默认的分区操作,分桶字段就是MR中的key,分桶数就是MR中ReduceTask的数量

2.操作

一级分区学习

1.创建分区表

就是加个partition by (分区列名 列格式)

create table dept_partition
(deptno int,    --部门编号dname  string, --部门名称loc    string  --部门位置
)partitioned by (day string)row format delimited fields terminated by '\t';

2.添加数据

创建数据

//在/opt/module/hive/datas/路径上创建文件dept_20220401.log,并输入如下内容。
[atguigu@hadoop102 datas]$ vim dept_20220401.log
10	行政部	1700
20	财务部	1800

插入数据 需要指定插入的分区

load data local inpath '/opt/module/hive/datas/dept_20220401.log' 
into table dept_partition 
partition(day='20220401');
insert overwrite table dept_partition partition (day = '20220402')
select deptno, dname, loc
from dept_partition
where day = '2020-04-01';

3.读数据

需要指明分区

select deptno, dname, loc ,day
from dept_partition
where day = '2020-04-01';

4.添加和删除分区

注意 分区分桶的操作,都是表操作,DDL 都是alter
为什么呢?因为分区相当于多加了一列,

 // 1.查看所有分区新信息
show partitions dept_partition;
// 2.创建单个分区
alter table dept_partition 
add partition(day='20220403');
// 3.创建多个分区
alter table dept_partition 
add partition(day='20220404') partition(day='20220405');
// 4.删除单个分区
alter table dept_partition 
drop partition (day='20220403');
// 5.删除多个分区
alter table dept_partition 
drop partition (day='20220404'), partition(day='20220405');

4.修复分区

为什么要修复分区?
数据不同步 : 情况1: 元数据有 HADOOP 无
情况2: 元数据无 HADOOP 有
但是注意
情况1 数据已经不存在了,只有元数据存在,同步的话,需要删除元数据
情况2 HADOOP中的数据还存在,元数据没有了,这时候,同步就生成元数据即可(重新导入一遍)
命令
add 增加分区信息
drop 删除分区信息
sync = add+drop

msck repair table table_name [add/drop/sync partitions];

2.二级分区

就是多加一列,用逗号隔开

create table dept_partition2(deptno int,    -- 部门编号dname string, -- 部门名称loc string     -- 部门位置
)
partitioned by (day string, hour string)
row format delimited fields terminated by '\t';
load data local inpath '/opt/module/hive/datas/dept_20220401.log' 
into table dept_partition2 
partition(day='20220401', hour='12');
select * 
from dept_partition2 
where day='20220401' and hour='12';

3.动态分区

根据最后一个列作为分区标准
感觉动态分区一般作为表优化使用(表数据量过大需要分区,但是手动分区太过繁琐)
在这里插入图片描述
在这里插入图片描述

2.分桶

1.概念

按行进行截取,行进行分桶

2. 例题

1.建表

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

分成4个部分,默认分桶规则是哈希取余(或者整数取余)
分桶必排序


http://www.ppmy.cn/news/1007900.html

相关文章

Vue 简版文件预览笔记

简版文件预览笔记 调用方法 <script lang"ts" setup>import {exportFileData,preViewFile,} from /xxx/tools.ts;import {fileDownload,} from /api/xxx/xx;// 预览方法const handleViewBtn () > {const filePath 获取预览地址;const urlFormat 获取预…

vscode无法连接远程服务器的可能原因:远程服务器磁盘爆了

vscode输入密码后一直等待&#xff0c;无法进入远程服务器终端&#xff1a; 同时Remote-SSH输出包含以下内容 在日志中的以下几个部分&#xff1a; [17:15:05.529] > wget download failed 这表明VS Code尝试在远程服务器上下载VS Code服务器时失败了。> Cannot write…

iOS 解析闪退信息

记录通过xxx.app.dSYM文件解析16进制闪退信息 因为运营给到的闪退信息是.txt文本&#xff0c;而不是导出的.carsh文件&#xff0c;同时给到了出包的xxx.app.dsYM文件,为了查看具体的闪退日志&#xff0c;只能通过命令行转才能查看原因。(如果同时有给到.crash文件、.app文件、…

uniapp 路由跳转方式

export function goBack(index, url) {if (index 1) { // 关闭当前页&#xff0c;返回上一页面或多级页面。uni.navigateBack({delta: url,animationType: pop-out,animationDuration: 300});} else if (index 2) { // 保留当前页&#xff0c;跳转到非tabbar页面&#xff0c;…

C语言笔试训练【第三天】

大家好&#xff0c;我是纪宁。 今天是C语言笔试训练的第三天&#xff0c;大家加油&#xff01; 第一题 1、已知函数的原型是&#xff1a; int fun(char b[10], int *a) &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xf…

Stability AI旗舰图像模型 SDXL1.0发布,AI绘画进入新的时代

Stability AI于7月26号开源了SDXL1.0文生图模型&#xff0c;要知道距离SDXL0.9开源发布也不过一个月,只能说AI发展日新月异。 根据官网介绍&#xff0c;SDXL1.0经过迭代更新&#xff0c;已经是目前世界上最好的图像生成模型 官网根据Discord上的几代实验模型和外部测试&#…

【0805作业】Linux中 AB终端通过两根有名管道进行通信聊天(半双工)(全双工)

作业一&#xff1a;打开两个终端&#xff0c;要求实现AB进程对话【两根管道】 打开两个终端&#xff0c;要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印B进程再回复一句话给A进程&#xff0c;A进程接收后打印重复1.2步骤&#xff0c;当收到quit后&am…

跨域+四种解决方法

文章目录 一、跨域二、JSONP实现跨域请求三、前端代理实现跨域请求四、后端设置请求头实现跨域请求五、Nginx代理实现跨域请求5.1 安装Nginx软件5.2 使用Ubuntu安装nginx 本文是在学习课程满神yyds后记录的笔记&#xff0c;强烈推荐读者去看此课程。 一、跨域 出于浏览器的同…