Hive---5、分区表和分桶表

news2024/12/23 20:42:53

1、分区表和分桶表

1.1 分区表

Hive中的分区就是把一张大表的数据按照业务需求分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。

1.1.1 分区表基本语法

1、创建分区表

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

2、分区表读写数据
(1)写数据

  • load

    • 数据准备
      在/opt/module/hive/datas/路径上创建文件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');
      

(2)insert
将day='20220401’分区的数据插入到day='20220402’分区,可执行如下装载语句

insert overwrite table dept_partition partition(day='20220402')
select deptno, dname, loc
from dept_partition
where day='2020-04-01'

2、读数据
查询分区表数据时,可以将分区字段看作表的伪列,可像其他字段一样使用分区字段。

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

3、分区表基本操作
(1)查看所有分区信息

select partitions dept_partition;

(2)增加分区

  • 创建单个分区
alter table dept_partition
add partition(day='20220403');
  • 同时创建多个分区(分区之间不能有逗号)
alter table dept_partition 
add partition(day='20220404') partition(day='20220405');

(3)删除分区

  • 删除单个分区
alter table dept_partition 
drop partition(day=''20220403);
  • 同时删除多个分区(分区之间必须有逗号)
alter table dept_partition
drop partition(day='20220404'),partition(day='20220405');

4、修复分区
Hive将分区表的所以分区信息都保存在了元数据中,只有元数据与HDFS上的分区路径一致时,分区表才能正常读写数据。若手动创建/删除分区路径,Hive都是感知不到的。这样会导致Hive的元数据和HDFS的分区路径不一致。再比如,若分区表位外部表,用户执行drop Partition 命令后,分区元数据会被删除,而HDFS的分区路径不会被删除,同样会导致Hive的元数据和HDFS的分区路径不一致。
若出现元数据和HDFS路径不一致的情况,可通过如下几种手段恢复。
(1)add partition
若手动创建HDFS的分区路径,Hive无法识别,可通过add partition命令增加分区元数据信息,从而使元数据和分区路径保持一致。
(2)drop partition
若手动删除HDFS的分区路径,Hive无法识别,可通过drop partition命令删除分区元数据信息,从而使元数据和分区路径保持一致。
(3)msck
若分区元数据和HDFS的分区路径不一致去,还可以使用msck命令进行修复,以下是该命令的用法说明。

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

说明:
msck repair table table_name add partitions :该命令会增加HDFS路径存在但元数据缺失的分区信息。
msck repair table table_name drop partitions:该命令会删除HDFS路径已经删除,但是元数据仍然存在的分区信息。
msck repair table table_name sync partition :该命令会同步HDFS路径和元数据分区信息,相当于同时执行上述的两个命令。
msck repair table table_name :等价于 msck repair table table_name add partitions 命令。

1.1.2 二级分区表

思考:如果一天内的日志数据量也很大,如何再将数据拆分?答案是二级分区表,例如可以在按天分区的基础上,再对每天的数据按小时进行分区。
1、二级分区建表语句

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

2、数据装载语句

load data local inpath '/opt/module/hive/datas/dept_20220401.log' 
into table dept_partition2 
partition(day='20220401', hour='12');

3、查询分区数据

select 
    * 
from dept_partition2 
where day='20220401' and hour='12';
1.1.3 动态分区

动态分区时指向分区表insert数据时,被写往的分区不由用户指定,而是由每行数据的最后一个字段的值来动态决定。使用动态分区,可只用一个insert语句将数据写入多个分区。
1、动态分区相关参数
(1)动态分区功能总开关(默认true,开启)

set hive.exec.dynamic.partition=true

(2)严格模式和非严格模式
动态分区的模式,默认strict(严格模式),要求必须指定一个分区为静态分区,nonstrict(非严格模式)允许所有的分区字段都使用动态分区。

set hive.exec.max.dynamic.parition.mode=nonstrict

(3)一条insert语句可同时创建的最大的分区个数,默认是1000

set hive.exec.max.dynamic.partitions=1000

(4)单个Mapper或者Reducer可同时创建的最大的分区个数,默认是100

set hive.exec.max.dynamic.partitions.pernode=100

(5)一条insert语句可以创建的最大的文件个数,默认100000

hive.exec.max.created.files=10000

(6)当查询结果为空时且进行动态分区时,是否抛出异常,默认false。

hive.exec.on.empty.partition=false

2、实例操作
需求:将dept表中的数据按照地区(loc字段),插入到目标表dept_partition_dynamic的相应分区中。
(1)创建目标分区

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

(2)设置动态分区

set hive.exec.dynamic.partition.mode = nonstrict;
insert into table dept_partition_dynamic 
partition(loc) 
select 
    deptno, 
    dname, 
    loc 
from dept;

(3)查看目标分区表的分区情况

show partitions dept_partition_dynamic;

1.2 分桶表

分区提供一个隔离数据和优化查询的便利方式。不过,并不是所有的数据集都可以形成合理的分区。对于一张表或者分区,Hive可以进一步组织成桶,也就是更为细粒度的数据范围划分,分区针对的是数据的储存路径,分桶针对的是数据文件。

分桶表的基本原理是首先为每行数据计算一个指定字段的数据的hash值,然后模以一个指定的分桶数,最后将取模运算结果相同的行,写入同一个文件中,这个文件就称为一个分桶(bucket)。

1.2.1 分桶表基本语法

1、建表语句

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

2、数据装载

  • 数据准备
    在/opt/module/hive/datas/路径上创建student.txt文件,并输入如下内容。

    1001	student1
    1002	student2
    1003	student3
    1004	student4
    1005	student5
    1006	student6
    1007	student7
    1008	student8
    1009	student9
    1010	student10
    1011	student11
    1012	student12
    1013	student13
    1014	student14
    1015	student15
    1016	student16
    
  • 导入数据到分桶中
    说明:Hive新版本(3)load数据可以直接跑MapReduce,老版的Hive(1,2)需要将数据传到一张表中,再通过查询的方式导入到分桶表中。

load data local inpath '/opt/module/hive/datas/student.txt' 
into table stu_buck;

(3)查看创建的分桶表中是否分成四个桶
在这里插入图片描述
(4)观察每个分桶中的数据

1.2.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';

2、数据装载

  • 导入数据到分桶表中

    load data local inpath '/opt/module/hive/datas/student.txt' 
    into table stu_buck_sort;
    
  • 查看创建的分桶表中是否分成4个桶
    在这里插入图片描述

  • 观察每个分桶中的数据(会发现每个分桶中的数据按照stu_id升序)

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

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

相关文章

scratch舞蹈演出 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年5月

目录 scratch舞蹈演出 一、题目要求 1、准备工作 2、功能实现 二、案例分析

Spring MVC的高级功能(异常处理器,拦截器,文件操作)

目录: 异常处理拦截器文件上传和下载 1.异常处理(简单异常处理,自定义异常处理,异常处理注解) 简单异常处理器 HandlerExceptionResolver接口 如果希望对Spring MVC中所有异常进行统一处理,可以使用S…

【Spring】——Spring的创建与使用

目录 一、传统程序开发与控制反转🍭 1、传统程序开发🍉 传统程序开发的缺陷🍓 解决传统开发中的缺陷🍓 2、控制反转思维程序开发🍉 3 对比总结规律🍉 二、Spring创建与使用🍭 1、创建Sp…

js解构记录

1.字符串结构 1.1 字符串转数组 1.2 字符串转成变量 1.3 结构字符串的属性 2. 数组结构 2.1 交换变量 2.2 允许指定默认值 只有赋值为undefined时默认值才生效,及时赋值null都不好使,会赋值为null 对是否是默认值在后面没有要求 3、对象结构 3.1 结…

spring cloud搭建(feign)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

I.MX RT1170加密启动详解(2):HAB认证原理

文章目录 1 基础2 使能过程3 Boot flow 1 基础 HAB认证是基于RSA或ECDSA算法的公钥密码学,它用一系列的私钥对image进行加密,然后BootROM在上电后用对应的公钥验证加密的镜像是否被修改。这个密钥结构就是PKI(Public Key Infrastructure)树 (1)normal …

DTU助力气象行业数字化转型,让数据更智能

近年来,随着社会的不断发展,气象行业在现代社会中扮演着极为重要的角色。天气对于人们的日常生活、农业、交通运输等方方面面都有着深远的影响。然而,在数据采集与监测过程中,气象行业也面临着一些问题。不准确的数据、不稳定的传…

基于simulink仿真无人机比赛场景

一、前言 展示了如何使用虚拟碰撞传感器以交互方式控制仿真,以及如何使用 Simulink3D 动画更改虚拟世界对象的外观。该示例表示一个简单的无人机 (UAV) 挑战。无人机比赛场景基于2013年在法国图卢兹举行的IMAV飞行比赛。 穿越窗口 降落直升机…

java基于springboot+vue的在线教育课程作业网站n5138

本基于springboot的在线教育网站的设计与实现有管理员,教师和学生三个角色。管理员功能有个人中心,教师管理,科目管理,学生管理,课程信息管理,课程作业管理,学生作业管理,学生成绩管…

Ubuntu下让matplotlib显示中文字体

文章目录 安装中文字体显示matplotlib库的字体文件夹删除matplotlib 的缓存文件(可选) matplotlib中设置字体,显示! 参考文章: https://zodiac911.github.io/blog/matplotlib-chinese.html Ubuntu下python的matplotli…

七篇深入理解机器学习和深度学习的读物推荐

在这篇文章中将介绍7篇机器学习和深度学习的论文或者图书出版物,这些内容都论文极大地影响了我对该领域的理解,如果你想深入了解机器学习的内容,哪么推荐阅读。 Attention Is All You Need 在自然语言处理和序列建模领域,Vaswani…

华为OD机试真题 Java 实现【水仙花数】【2022Q4 100分】

一、题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 1^3 5^3 3^3。 二、输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到…

chatgpt赋能python:Python教程:如何创建一个Rectangle类

Python教程:如何创建一个Rectangle类 Python是一种简单易学的编程语言,适用于各种应用场景。在本教程中,我们将探讨如何使用Python创建一个Rectangle类。Rectangle类是一个简单的图形类,用于描述长方形的特征,如宽度和…

双域多尺度融合深度神经网络的PPG生物特征识别研究

目录 前言概述研究背景PPG存在的问题本文的创新点数据处理数据预处理数据分割特征提取 模型结构LSTM网络多尺度特征提取模块双域注意模块识别与验证 实验部分数据集识别指标 前言 本文是根据一篇论文总结写的。 论文英文名为:Dual-domain and Multiscale Fusion D…

Redis底层学习(三)—存储类型-List篇

文章目录 特点具体服务器操作命令具体操作应用场景 特点 适⽤场景:消息队列。 它的特点就是内部元素有序、重复,并且插⼊和删除很快 O(1) ,但是查找却很慢 O(n) 。功能⽀持队列和栈操作。 具体服务器操作命令 左侧插⼊元素: LP…

基于同步矩阵的多通道脑电功能连接分析_kaic

摘 要 本文研究了基于同步矩阵的多通道脑电功能连接分析方法,旨在揭示脑区之间的功能联系。首先,介绍了脑电信号的产生和特点,以及功能连接分析的概念和方法。其次,详细讨论了多通道脑电数据的采集和预处理流程,包括…

JAVA并发学习

1 基础准备 1.1 并发与并行 并发是不同的代码块交替执行,也就是交替可以做不同的事情。 并行是不同的代码块同时执行,也就是同时可以做不同的事情。 根据CPU 核数,线程运行是不同的 单核CPU(微观串行,宏观并行&…

YOLOV5 + PYQT5双目测距(一)

YOLOV5 PYQT5双目测距 1. 测距源码2. 测距原理3. PYQT环境配置4. 实验结果4.1 界面1(简洁版)4.2 界面2(改进版) 1. 测距源码 详见文章 YOLOV5 双目测距(python) 2. 测距原理 如果想了解双目测距原理&a…

Stable Diffusion 指定模型人物,Lora 训练全流程

简介 在使用 Stable Diffusion 的时候,可以选择别人训练好的 Lora,那么如何训练自己的 Lora,本篇文章介绍了介绍了如何训练Lora,如何从训练的模型中选择好的模型,如何在 Stable Diffusion 中使用。 闲话不多说&#…

CUDA编程接口详解

CUDA编程接口详解 本文将详细介绍NVIDIA CUDA编程指南第3章(编程接口)中的核心概念,例如NVCC编译器、CUDA运行时、版本管理和兼容性、计算模式、模式切换以及Windows下的Tesla计算集群模式。以下是本文的大纲: 文章目录 CUDA编程…