hive分区详细教程

news2024/9/27 17:52:45

为什么要分区?

为了提高sql的查询效率
比如:
select * from orders where create_date='20230826';
假如数据量比较大,这个sql就是全表扫描,速度肯定慢。
可以将数据按照天进行分区,一个分区就是一个文件夹,当你查询20230826的时候只需要去20230826这个文件夹中取数据即可,不需要全表扫描,提高了查询效率。

总结

1)分区表实际上就是对应一个HDFS文件系统上的独立的文件夹。
2)该文件夹下是该分区所有的数据文件。
3)Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。
4)在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多

根据什么分区

根据业务需求而定,不过通常以年、月、日、小时、地区等进行分区

语法

create table tableName(
.......
.......
)
partitioned by (colName colType [comment '...'],...)

一般建表语句中的关键字都喜欢加 ed

总结

分区就是在hdfs上创建文件夹,为了提高查询效率而已

分区实战

1)一级分区(分区字段只有一个)

create table if not exists part1(
  id int,
  name string,
  age int
)
partitioned by (dt string)
row format delimited 
fields terminated by ','
lines terminated by '\n';

由上面可以知道,dt字段不在普通字段里面,是一个伪列,但是可以当做普通字段使用。

搞两份数据user1.txt 和 user2.txt

user1.txt
1,zhangsan,21
2,lisi,25
3,wangwu,33

user2.txt
4,zhaoliu,38
5,laoyan,36
6,xiaoqian,12

加载数据:建表的时候有ed,不建表的时候的sql不加ed.

添加数据:

load data local inpath '/home/hivedata/user1.txt' into table part1 partition(dt='2023-08-25');
load data local inpath '/home/hivedata/user3.txt' into table part1 partition(dt='2023-08-26');

查看数据:发现分区字段列也查询出来了。

2)二级分区【分区字段有两个】

create table if not exists part2(
id int,
name string,
age int
)
partitioned by (year string,month string)
row format delimited 
fields terminated by ',';
load data local inpath '/home/hivedata/user1.txt' into table part2 partition(year='2023',month='03'); 

load data local inpath '/home/hivedata/user3.txt' into table part2 partition(year='2023',month=04);

load data local inpath '/home/hivedata/user3.txt' into table part2 partition(year='2023',month="05");

3) 三级分区【三级目录】

建表:

create table if not exists part3(
id int,
name string,
age int
)
partitioned by (year string,month string,day string)
row format delimited 
fields terminated by ',';

加载数据:

load data local inpath '/home/hivedata/user1.txt' into table part3 partition(year='2023',month='08',day='01');

load data local inpath '/home/hivedata/user3.txt' into table part3 partition(year='2023',month='08',day='31'); 

注意:创建了某个分区之后,除了在 hdfs 上创建了与之对应的文件夹,mysql 中的元数据其实也做了新增操作,如图所示:

4)测试分区字段的大小写

在hive中,分区字段名是不区分大小写的,不过字段值是区分大小写的。我们可以来测试一下

新建表

create table if not exists part4(
id int,
name string,
age int
)
partitioned by (year string,month string,DAY string)
row format delimited fields terminated by ',' ;

新创建的分区表没有数据的话,是不会有文件夹的。

导入数据:

load data local inpath '/home/hivedata/user1.txt' into table part4 partition(year='2018',month='03',DAy='21');

load data local inpath '/home/hivedata/user3.txt' into table part4 partition(year='2018',month='03',day='AA');

5)分区数据的查询

单个分区查询:

select * from part1 where dt='2018-03-21';

查询多个分区:

select * from part1 where dt='20240823' union select * from part1 where dt='20240824';

使用union 整个SQL语句进行了MR任务,而以下两个sql没有进行MR任务。

select * from part1 where dt='20240823' or dt='20240824';

select * from part1 where dt in('20240823','20240824');

6)查看分区的数量

语法:
	show partitions tableName
eg:
 	show partitions part4;

分区和分区字段的区别:

分区:比如year=2018/month=03/day=21 这是一个分区

分区字段:创建表的时候,有多少个分区字段就是多少级分区。

创建表的时候 partitioned by (year string,month string,day string) 表示创建一个拥有3级分区的表,目前如果没有数据的,是一个分区都没有的。

7)添加分区

1、创建空数据的分区

-- 单个分区
alter table part3 add partition(year='2023',month='05',day='02');
-- 多个分区
alter table part3 add partition(year='2023',month='05',day='03') partition(year='2023',month='05',day='04');

一下子添加多个分区,partition 之间没有符号!

2)添加分区,并且带有数据

单分区带数据

alter table part3 add partition(year='2023',month='05',day='05') location '/user/hive/warehouse/yhdb.db/part1/dt=2023-08-25';

hive (yhdb)> select * from part3 where year='2023' and month='05' and day='05';
OK
part3.id        part3.name      part3.age       part3.year      part3.month     part3.day
1       zhangsan        21      2023    05      05
2       lisi    25      2023    05      05
3       wangwu  33      2023    05      05
Time taken: 0.431 seconds, Fetched: 3 row(s)

多分区带数据

alter table part3 add 
partition(year='2020',month='05',day='06') location '/user/hive/warehouse/yhdb.db/part1/dt=2023-08-25'
partition(year='2020',month='05',day='07') location '/user/hive/warehouse/yhdb.db/part1/dt=2023-08-25';

8) 删除分区

删除一个分区:
alter table part3 drop partition(year='2023',month='05',day='05');

删除多个分区,中间有逗号
alter table part3 drop partition(year='2023',month='05',day='02'),partition(year='2023',month='05',day='03');

9)查看表设计

desc formatted part3;

对比一下:
desc part4;
desc formatted part4;
desc extended part4;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++之STL—常用算术生成算法

#include <numeric> accumulate(iterator beg, iterator end, value); // 计算容器元素累计总和 // beg 开始迭代器 // end 结束迭代器 // value 起始值 fill (iterator beg, iterator end, value); // 向容器中填充元素 // beg 开始迭代器 // end 结束迭代器 // val…

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言 随着生成式 AI 的快速发展&#xff0c;基于 AI 开发框架构建 AI 应用的诉求迅速增长&#xff0c;涌现出了包括 LangChain、LlamaIndex 等开发框架&#xff0c;但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言&a…

32. Java栈和队列

1. 前言 栈和队列相关的题目是校招中出现频率一般,但是是属于相对基础的题型。我们要关注两类问题,栈和队列的添加和删除操作,以及栈和队列之间的区别和联系。 2. 栈和队列 2.1 数据结构 首先我们给出栈和队列的数据结构定义: (1)栈(Stack):允许在某一端插入元素(…

【PyTorch入门】编程杂谈·1(文件、字典结构、字符串统计、结果保存)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;PyTorch入门宝典_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…

创作一个JavaScript案例,提示工程师请了解一下。

预期 提问1&#xff1a; web开发im的聊天记录展示的实现思路和代码实战。用户数据结构{nickName&#xff0c;uerID&#xff0c;msg,picture}。当nickName"主人"的时候聊天内容底色绿色&#xff0c;主人的聊天记录是靠左显示&#xff0c;其他人靠右显示。数据内容有长…

如何在 Three.js 场景中创建可点击展开的标签

在复杂的可视化场景中&#xff0c;经常需要为 3D 对象添加可交互的标签&#xff0c;以便用户点击时可以查看详细信息。这篇文章将通过一个简单的案例展示&#xff0c;如何在 Three.js 中为对象创建可点击的标签&#xff0c;点击标签可以展开详细信息&#xff0c;再次点击可以关…

JAVA集成工作流实际项目操作参考,springboot,vue,activiti,在线流程绘制,会签,退回,网关,低代码,

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

C语言进阶【6】---结构体【1】(结构体的本质你不想了解吗?)

本章概述 结构体类型的声明结构体变量的创建和初始化结构体成员访问操作符彩蛋时刻&#xff01;&#xff01;&#xff01; 结构体类型的声明 咱们在讲操作符那个章节中&#xff0c;对于结构体类型的声明进行了讲解&#xff0c;咱们先来回忆一下&#xff0c;为后面的讲解作准备…

堆排序,TopK问题|向上调整建堆|向下调整建堆(C)

堆排序 void HeapSort(int* a, int n) {HP hp;HeapInit(&hp);for (int i 0; i < n; i){HeapPush(&hp, a[i]);}int i 0;while (!HeapEmpty(&hp)){a[i] HeapTop(&hp);HeapPop(&hp);}HeapDestroy(&hp); }先初始化一个堆将数组中的数据一个一个顺序…

【Python大语言模型系列】在阿里云ECS服务器上部署dify大模型应用开发平台(完整教程)

这是我的第360篇原创文章。 一、阿里云ECS简介 云服务器( Elastic Compute Service ,简称ECS )是一-种简单高效、处理能力可弹性伸缩的计算服务&#xff0c;帮助您快速构建更稳定、安全的应用,提升运维效率,降低IT成本&#xff0c;使您更专注于核心业务创新。 这个活动需要满…

Vatee万腾平台:企业智能化生态的领航者

在科技日新月异的今天&#xff0c;企业的智能化转型已成为不可逆转的趋势。Vatee万腾平台&#xff0c;凭借其前瞻性的技术视野和不懈的创新精神&#xff0c;正逐步构建起一个以智能化为核心的新型商业生态&#xff0c;成为推动企业智能化升级的核心力量。 Vatee万腾平台深谙技…

软件设计之Maven(1)

软件设计之Maven(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版Maven教程&#xff08;高效入门maven&#xff0c;上手又快又稳&#xff09; 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Maven简介安装与环境配置Maven工程GA…

【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理&#xff08;一&#xff09;感知机&#xff08;二&#xff09;多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点&#xff08;一&#xff09;优点&#xff08;二&#xff09;缺点 四、MLP分类任务实现…

【html网页制作】国庆节日主题网页制作含js轮播(5页面附效果源码)

HTMLCSS节日国庆主题网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、首页Page2、节日由来Page3、节日视频Page4、庆祝活动Page5、留言 &#x1f40b;三、网页架构与技术3.1 脑海构思…

# linux从入门到精通(二)

linux从入门到精通&#xff08;二&#xff09; 一、Linux系统的安装&#xff1a;新建VM虚拟机 1、Linux版本的选择 1&#xff09;版本选择&#xff1a;CentOS 6.5 【镜像一般都是xxx.iso文件】 2&#xff09;为什么不选择7.x版本&#xff1f; 6.x的各种系统操作模式是基础…

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…

​​XrayGLM原理与部署

接上一篇&#xff1a;VisualGLM-6B——原理与部署-CSDN博客 XrayGLM技术背景与原理 XrayGLM 是一种基于 VisualGLM-6B 微调开发的多模态医学影像诊断模型&#xff0c;专门用于处理医学影像&#xff08;如 X 光胸片&#xff09;的自动诊断和报告生成任务。该模型旨在为中文医学…

第8章_索引的创建与设计原则

1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 &#xff0c;索引可以…