大数据从0到1的完美落地之Hive分区

news2025/1/9 1:34:58


分区简介

为什么分区

Hive的Select查询时,一般会扫描整个表内容。随着系统运行的时间越来越长,表的数据量越来越大,而hive查询做全表扫描,会消耗很多时间,降低效率。而有时候,我们需求的数据只需要扫描表中的一部分数据即可。这样,hive在建表时引入了partition概念。即在建表时,将整个表存储在不同的子目录中,每一个子目录对应一个分区。在查询时,我们就可以指定分区查询,避免了hive做全表扫描,从而提高查询效率。

分区案例

一级分区的使用

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';
复制代码

2) 加载数据

load data local inpath './data/user1.txt' into table part1 partition(dt='2020-05-05');
load data local inpath './data/user2.txt' into table part1 partition(dt='2020-05-06');
复制代码

二级分区的使用

1) 建表语句

create table if not exists part2(
id int,
name string,
age int
)
partitioned by (year string,month string)
row format delimited 
fields terminated by ',';
复制代码

2) 加载数据

load data local inpath './data/user1.txt' into table part2 partition(year='2020',month='03'); 
load data local inpath './data/user2.txt' into table part2 partition(year='2020',month=04);
load data local inpath './data/user2.txt' into table part2 partition(year='2020',month="05");
复制代码

三级分区的使用

1) 建表语句

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 ',';
复制代码

2)加载数据

load data local inpath './data/user1.txt' into table part3 partition(year='2020',month='05',day='01');

load data local inpath './data/user2.txt' into table part3 partition(year='2019',month='12',day='31');  
复制代码

分区类型详解

分区的种类

  1. 静态分区:直接加载数据文件到指定的分区,即静态分区表。
  2. 动态分区:数据未知,根据分区的值来确定需要创建的分区(分区目录不是指定的,而是根据数据的值自动分配的)
  3. 混合分区:静态和动态都有。

分区属性设置

hive.exec.dynamic.partition=true,是否支持动态分区操作
hive.exec.dynamic.partition.mode=strict(四最可特)/nonstrict:  严格模式/非严格模式
hive.exec.max.dynamic.partitions=1000: 总共允许创建的动态分区的最大数量
hive.exec.max.dynamic.partitions.pernode=100:in each mapper/reducer node
复制代码

创建动态分区的案例

1)创建动态分区表

create table dy_part1(
sid int,
name string,
gender string,
age int,
academy string
)
partitioned by (dt string)
row format delimited fields terminated by ','
;
复制代码

2)动态分区加载数据

下面方式不要用,因为不是动态加载数据

load data local inpath '/hivedata/user.txt' into table dy_part1 partition(dt='2020-05-06');
复制代码

正确方式:要从别的表中加载数据

第一步:先创建临时表:

create table temp_part1(
sid int,
name string,
gender string,
age int,
academy string,
dt string
)
row format delimited 
fields terminated by ','
;
复制代码

注意:创建临时表时,必须要有动态分区表中的分区字段。

第二步:导入数据到临时表:

95001,李勇,男,20,CS,2017-8-31
95002,刘晨,女,19,IS,2017-8-31
95003,王敏,女,22,MA,2017-8-31
95004,张立,男,19,IS,2017-8-31
95005,刘刚,男,18,MA,2018-8-31
95006,孙庆,男,23,CS,2018-8-31
95007,易思玲,女,19,MA,2018-8-31
95008,李娜,女,18,CS,2018-8-31
95009,梦圆圆,女,18,MA,2018-8-31
95010,孔小涛,男,19,CS,2017-8-31
95011,包小柏,男,18,MA,2019-8-31
95012,孙花,女,20,CS,2017-8-31
95013,冯伟,男,21,CS,2019-8-31
95014,王小丽,女,19,CS,2017-8-31
95015,王君,男,18,MA,2019-8-31
95016,钱国,男,21,MA,2019-8-31
95017,王风娟,女,18,IS,2019-8-31
95018,王一,女,19,IS,2019-8-31
95019,邢小丽,女,19,IS,2018-8-31
95020,赵钱,男,21,IS,2019-8-31
95021,周二,男,17,MA,2018-8-31
95022,郑明,男,20,MA,2018-8-31

load data local inpath './data/student2.txt' into table temp_part1;    
复制代码

第三步:动态加载到表

insert into dy_part1 partition(dt) select sid,name,gender,age,academy,dt from temp_part1;


注意:严格模式下,给动态分区表导入数据时,分区字段至少要有一个分区字段是静态值
     非严格模式下,导入数据时,可以不指定静态值。
复制代码

混合分区示例

1) 创建一个分区表:

create table dy_part2(
id int,
name string
)
partitioned by (year string,month string,day string)
row format delimited fields terminated by ','
;
复制代码

2) 创建临时表

create table temp_part2(
id int,
name string,
year string,
month string,
day string
)
row format delimited fields terminated by ','
;

数据如下:
1,廉德枫,2019,06,25
2,刘浩(小),2019,06,25
3,王鑫,2019,06,25
5,张三,2019,06,26
6,张小三,2019,06,26
7,王小四,2019,06,27
8,夏流,2019,06,27

load data local inpath './data/temp_part2.txt' into table temp_part2;
复制代码

3) 导入数据到分区表

- 错误用法:
    insert into dy_part2 partition (year='2019',month,day) 
    select * from temp_part2;

- 正确用法:
insert into dy_part2 partition (year='2020',month,day) 
select id,name,month,day from temp_part2;
复制代码

4) 分区表注意事项

1. hive的分区使用的是表外字段,分区字段是一个伪列,但是分区字段是可以做查询过滤。
2. 分区字段不建议使用中文
3. 一般不建议使用动态分区,因为动态分区会使用mapreduce来进行查询数据,如果分区数据过多,导致namenode和resourcemanager的性能瓶颈。所以建议在使用动态分区前尽可能预知分区数量。
4. 分区属性的修改都可以修改元数据和hdfs数据内容。
复制代码

5) Hive分区和Mysql分区的区别

mysql分区字段用的是表内字段;而hive分区字段采用表外字段。

 更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料 

【千锋教育】大数据开发全套教程,史上最全面的大数据学习视频

 

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

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

相关文章

java面试高频面试题

文章目录 面向对象 什么是面向对象?封装继承多态 和equals比较hashCode与equals重载和重写的区别Final类加载器spring是什么AOP的理解谈谈你对IOC的理解零拷贝RocketMQ 架构设计RocketMq 事务消息原理RockeMq顺序消息消费原理简述RockerMQ持久化机制RocketMQ如何保…

redis学习整理

目录 一、简述 二、作用 三、五大基本数据类型 Key命令 1.String字符串 2.List列表 3.Set(集合) 4.Hash(哈希) 5.zSet(有序集合) 四、主从复制 与 哨兵模式 1. 主从复制: 2. 哨兵模式&#xff…

【正点原子STM32连载】 第四十一章 游戏手柄实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第四…

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结: 前言: C的学习难度大,内容繁多。因此我们要及时掌握C的各种特性,因此我们更新本篇文章,向…

部署vue element-ui admin报错(vue2)

部署vue element-ui admin报错(vue2) 目录 部署vue element-ui admin报错(vue2) 一、官方安装说明 二、部署报错的关键影响因素 2.1、“开发模板”版本 2.2、完整版 2.2.1、基础知识和基础依赖 2.2.2、原理-安装过程 三、完整版 3.3、win10环境 四、效果 4.1、win7…

云安全技术——kvm虚拟化技术

目录 10-1 kvm简介 10-2 在CentOS 7 图形化界面下安装KVM 使用IDEA开发读写MySQL数据库程序 实验目的 了解 CentOS7图形化界面的部署方法 了解 KVM的组成和作用 了解 KVM的技术架构 了解KVM的安装方法 了解 KVM创建虚拟机的方法 了解KVM的常用管理命令 实验要求 能部署图形化…

为什么建议孩子学Python?理由都在这!

近几年,越来越多的家长选择让孩子学习编程,以此提高孩子的逻辑思维、信息素养等综合能力。 Python作为一种计算机程序设计语言,在科技行业中有广泛的应用,逐渐成为少儿编程教育中必学课程之一。今天,编编就为大家详细…

【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(二)

在上文中(点击这里回顾>>),我们为大家介绍了HTML / JSP编辑器、智能代码完成和内容辅助等功能,本文将继续介绍Emmet支持、Outline 视图功能等。 MyEclipse v2023.1正式版下载 如果您有HTML或JSP文件要编辑,这里…

chatgpt赋能python:Python聊天程序:现代化交流的必备工具

Python聊天程序:现代化交流的必备工具 在信息技术快速发展的现代社会,聊天作为一种流行的交流方式已经取代了传统的语音电话和短信。由于智能手机和电脑的广泛普及,越来越多的人习惯于使用聊天软件来与朋友、家人和同事保持联系。因此&#…

GBASE南大通用携手麒麟软件、索信达 共推金融信创联合解决方案

在国家信创战略推动下,我国正逐步实现基础硬件-基础软件-行业应用软件的国产化替代。信创浪潮中,各产业链以及不同垂直细分领域的创新主体,正以开放、创新、团结的姿态,形成高凝聚力的生态合作,共推信创产业发展&#…

【Java】JVM学习(三)

JVM的整体内存结构 本地方法栈 本地方法栈跟 Java 虚拟机栈的功能类似,Java 虚拟机栈用于管理 Java 函数的调用,而本地方法栈则用于管理本地方法的调用。但本地方法并不是用 Java 实现的,而是由 C 语言实现的(比如Object.hashcode方法)。 …

PCA(主成分分析)

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。数据降维是无监督学习的另外一个常见问题。 数据的向量表示及降维问题 …

PostgreSQL 如何对索引进行分析和处理

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

智慧煤矿4G物联网方案,矿山矿井远程监控管理4G网关应用

随着经济发展煤矿需求不断激增,矿山矿井普遍处于偏远山区,生产管理、人员安全、生产效率是每个矿山矿井都需要考虑的问题,利用网关对现场终端设备连接组网,实现智慧煤矿远程管理。 各矿山矿井分布范围比较广泛,户外环境…

《Opencv3编程入门》学习笔记—第八章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第八章 图像轮廓与图像分割修复 一、查找并绘制轮廓 一个轮廓一般对应一系列的点,也就是图像中的一条曲线,其表示方法可能根据不同的情况而有所不…

FFmpeg 播放器实现音视频同步的几种方式

我们基于 FFmpeg 利用 OpenGL ES 和 OpenSL ES 分别实现了对解码后视频和音频的渲染,本文将实现播放器的最后一个重要功能:音视频同步。 老人们经常说,播放器对音频和视频的播放没有绝对的静态的同步,只有相对的动态的同步&#…

深度学习管理工具

1. mlflow https://zhuanlan.zhihu.com/p/363673389 官方文档: https://www.mlflow.org/docs/latest/index.html https://zhuanlan.zhihu.com/p/67173051 在跟踪实验时,通过运行 mlflow ui 后在 http:// localhost:5000 中进行…

ranger,hive,hdfs的三者的权限管理

ranger,hive,hdfs的三者的权限管理 情况一:连接datagrip 用户在hdfs上的权限 可以看出只给了用户write权限,尝试登录xwq用户,在datagrip上登录成功 经过实验验证:要想使用datagrip或者hive-cli登录hive…

C++11【一】

文章目录 一、C11简介二、右值引用三、可变参数模板四、 empacle_back(移动构造/赋值)五、简单特性 一、C11简介 C11是C编程语言的一个版本,于2011年发布。C11引入了很多新特性,比如:类型推导(auto关键字)、Lambda表达式、线程库、列表初始化…

电源浪涌保护器加装后备保护器的作用

随着现代化技术的发展,信息化系统集成度越来越高。设备敏感度高,抗冲击能力低,极易受到电涌脉冲的危害。电涌保护器(SPD)作为专业的防电涌产品,应用越来越广,SPD的应用涉及很多的专业知识&#…