12 | Hive分区表

Hive基础知识(三)--分桶表 1、分桶表 分桶和分区一样,也是一种通过改变表的存储模式,从而完成对表优化的一种调优方式,但和分区不同的是,分区是将表拆分到不同的子目录中进行存储,而分桶是将表拆分到不同文件中进行存储。 2、分桶操作目的 改变数据的存储分布,提升查询、取样、Join等特定任务的执行效率。 3、分桶表的操作 CREATE [EXTERNAL] TABLE <table_name> (<col_name> <data_type> [, <col_name> <data_t 阅读详情

分区表

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

10.1.1 分区表基本语法

1. 创建分区表

hive (default)>

create table dept_partition

(

    deptno int,    --部门编号

    dname  string, --部门名称

    loc    string  --部门位置

)

    partitioned by (day string)

    row format delimited fields terminated by '\t';

2. 分区表读写数据

1)写数据

(1)load

1数据准备

在/opt/module/hive/datas/路径上创建文件dept_20220401.log,并输入如下内容。

[atguigu@hadoop102 datas]$ vim dept_20220401.log

10 行政部  1700

20 财务部  1800

2装载语句

hive (default)>

load data local inpath '/opt/module/hive/datas/dept_20220401.log'

into table dept_partition

partition(day='20220401');

(2)insert

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

hive (default)>

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)查看所有分区信息

hive> show partitions dept_partition;

2)增加分区

(1)创建单个分区

hive (default)>

alter table dept_partition

add partition(day='20220403');

(2)同时创建多个分区(分区之间不能有逗号)

hive (default)>

alter table dept_partition

add partition(day='20220404') partition(day='20220405');

3)删除分区

(1)删除单个分区

hive (default)>

alter table dept_partition

drop partition (day='20220403');

(2)同时删除多个分区(分区之间必须有逗号)

hive (default)>

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命令进行修复,以下是该命令的用法说明。

hive (default)>

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 partitions:该命令会同步HDFS路径和元数据分区信息,相当于同时执行上述的两个命令。

msck repair table table_name:等价于msck repair table table_name add partitions命令。

10.1.2 二级分区表

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

1)二级分区表建表语句

hive (default)>

create table dept_partition2(

    deptno int,    -- 部门编号

    dname string, -- 部门名称

    loc string     -- 部门位置

)

partitioned by (day string, hour string)

row format delimited fields terminated by '\t';

2)数据装载语句

hive (default)>

load data local inpath '/opt/module/hive/datas/dept_20220401.log'

into table dept_partition2

partition(day='20220401', hour='12');

3)查询分区数据

hive (default)>

select

    *

from dept_partition2

where day='20220401' and hour='12';

10.1.3 动态分区

动态分区是指向分区表insert数据时,被写往的分区不由用户指定,而是由每行数据的最后一个字段的值来动态的决定。使用动态分区,可只用一个insert语句将数据写入多个分区。

1)动态分区相关参数

(1)动态分区功能总开关(默认true,开启)

set hive.exec.dynamic.partition=true

(2)严格模式和非严格模式

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

set hive.exec.dynamic.partition.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=100000

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

hive.error.on.empty.partition=false

2)案例实操

需求:将dept表中的数据按照地区(loc字段),插入到目标表dept_partition_dynamic的相应分区中。

(1)创建目标分区表

hive (default)>

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;

hive (default)>

insert into table dept_partition_dynamic

partition(loc)

select

    deptno,

    dname,

    loc

from dept;

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

hive (default)> show partitions dept_partition_dynamic;

10.2 分桶表

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

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

10.2.1 分桶表基本语法

1)建表语句

hive (default)>

create table stu_buck(

    id int,

    name string

)

clustered by(id)

into 4 buckets

row format delimited fields terminated by '\t';

2)数据装载

(1)数据准备

在/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

(2)导入数据到分桶表中

说明:Hive新版本load数据可以直接跑MapReduce,老版的Hive需要将数据传到一张表里,再通过查询的方式导入到分桶表里面。

hive (default)>

load data local inpath '/opt/module/hive/datas/student.txt'

into table stu_buck;

(3)查看创建的分桶表中是否分成4个桶

(4)观察每个分桶中的数据

10.2.2 分桶排序表

1)建表语句

hive (default)>

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)数据装载

(1)导入数据到分桶表中

hive (default)>

load data local inpath '/opt/module/hive/datas/student.txt'

into table stu_buck_sort;

(2)查看创建的分桶表中是否分成4个桶

(3)观察每个分桶中的数据

Hive查询系列之分区表与分桶表 Hive查询之分区表与分桶表 1 分区表 ​ 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文 件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。 1.1 分区表基本操作 1)引入分区表(需要根据日期对日志进行管理, 通过部门信息模拟) dept_20200401.log dept_20200402.log dept_20200403.log 2) 阅读详情

相关推荐

mysql表分区join_​实战:Flink 1.12 维表 Join Hive 最新分区功能体验

​实战:Flink 1.12 维表 Join Hive 最新分区功能体验余东@哗啦啦 Flink 中文社区我们生产常有将实时数据流与 Hive 维表 join 来丰富数据的需求,其中 Hive 表是分区表,业务上需要关联上 Hive 最新分区的数据。上周 Flink 1.12 发布了,刚好支撑了这种业务场景,我也将 1.12 版本部署后做了一个线上需求并上线。对比之前生产环境中实现方案,最新分区...

weixin_33821888的博客 406

Hive分区表

1、为什么设立分区表 在大量数据需要查询时,虽然可以通过where进行筛选,但也是检索整个数据表后得到的结果。 而将一个大的数据集根据实际需要分割成各个小型数据集,再通过where选择需要查询的分区, 故而效率大大提高。 2、分区表实质 Hive中的分区是将一个文件分割成各个目录(文件)。 3、分区表语法 3.1建立分区表 create table 分区表名称( 字段名称1 数据类型, 字段名称2 数据类型, 。。。 字段名称n 数据类型 ) partitioned by(分区

weixin_44246850的博客 3791

Hive 实战练习(一)—按照日期将每天的数据导入Hive表中

每天会产生很多的日志文件数据,有这么一种需求:需要将每天产生的日志数据在晚上12点钟过后定时执行操作,导入到Hive表中供第二天数据分析使用。要求创建分区表,并按照日期分区。

NIITYZU的专栏 6721

hive —— 分区表

hive —— 分区表 为了对表进行合理的管理以及提高查询效率,Hive可以将表组织成“分区”。一个分区实际上就是表下的一个目录,一个表可以在多个维度上进行分区,分区之间的关系就是目录树的关系。 通过PARTITIONED BY子句指定,分区的顺序决定了谁是父目录,谁是子目录。 例如:partitioned by(Field1,Field2,…),那么数据在hdfs上的存放路径是:                 默认表路径/Field1=var1/Field=var2 hive分区表有静态分区和动态分区两

qq_34132046的博客 6713

基于dolphinscheduler的增量数据同步至hive分区表

基于dolphinscheduler的增量数据同步至hive分区表前言一、创建新的hive分区表1.外部分区表sql准备2.创建工作流3、将sql语句写入工作流中4、保存选择租户,上线运行5、任务实例中查看运行状态,状态:成功 即创建成功,可以通过hive的beeline客户端执行如下命令查看表创建详情二、hive分区表创建好后需要增加分区,使用shell命令创建分区1、添加每天的定时增加分区任务2、配置shell命令,使用hivevar的方式提交参数3、配置参数:1)增加自定义变量2)点击保存 并增加.

fengyu_lc的博客 6321

(03)Hive的相关概念——分区表、分桶表

Hive的相关概念——分区表、分桶表

爱吃辣条的博客 2531

hive 分区表select全部数据_06716.2.0如何将CDH5.12的Hive元数据迁移到CDH6.2

作者:余枫1文档编写目的这里我们假定一个场景,你需要迁移CDH5.12到CDH6.2,CDH5.12和CDH6.2分别是两个不同的集群,我们的工作主要是HDFS数据和各种元数据从CDH5.12迁移到CDH6.2,本文不讨论HDFS数据的迁移也不讨论其他元数据的迁移比如CM或Sentry,而只关注Hive元数据的迁移。这里的问题主要是CDH5.12的Hive为1.1,而CDH6.2中Hiv...

weixin_39759890的博客 197

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3754

2023.11.12 hive中分区表,分桶表与区别概念

分区表的本质就是在分目录避免查询时全表扫描数据需要产生分桶文件, 查询的时候特定操作上提升效率(过滤,join,分组 以及 抽样)底层会使用hash算法对桶数量取模对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

白白的wj的博客 1328

VSCode终端打不开?3分钟搞定Windows下Terminal配置(附最新JSON设置方法)

本文针对Windows系统下VSCode终端无法启动的常见问题,提供了详细的诊断与解决方案。核心在于更新已弃用的旧配置,采用最新的JSON设置方法,通过定义`terminal.integrated.profiles.windows`和指定`terminal.integrated.defaultProfile.windows`,快速修复并优化终端配置,实现三分钟内恢复正常使用。

flower的专栏 740

单细胞monocle3分析流程再整理

定义root cell, 推断拟时方向# 结合先验知识自定(示例数据)# 可视化示例数据,起点是随便点的。

zfyyzhys的博客 2100

Hive创建外部分区表

Hive外部分区表 建表语句 create external table xxx( xxx int, xxx string, xxx array<bigint>, xxx struct<aaa:string,bbb:string> ) partitioned by(pk string) # 分区 row format delimited fields terminated by ',' # 按逗号分隔, text存储时使用 row format serde 'org.apache.h

Mr.W的博客 2104

YOLOv11的嗅觉传感器数据关联-(特殊场景下的气味-视觉联合分析)

摘要 本文探讨了YOLOv11与嗅觉传感器融合的多模态感知技术。通过分析YOLOv11的架构特性与嗅觉传感器的数据特点,提出了三种融合策略:数据级、特征级和决策级融合。系统采用硬件同步方案实现时空对齐,包含视觉采集模块、嗅觉传感模块和边缘计算单元。环境配置基于Python 3.9和PyTorch 2.0,支持实时多模态数据处理。该技术可应用于环境监测、工业检测等场景,突破单一视觉感知的局限性。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 625

视图分区_实战:Flink 1.12 维表 Join Hive 最新分区功能体验

我们生产常有将实时数据流与 Hive 维表 join 来丰富数据的需求,其中 Hive 表是分区表,业务上需要关联上 Hive 最新分区的数据。上周 Flink 1.12 发布了,刚好支撑了这种业务场景,我也将 1.12 版本部署后做了一个线上需求并上线。对比之前生产环境中实现方案,最新分区直接作为时态表提升了很多开发效率,在这里做一些小的分享。Flink 1.12 前关联 Hive 最新分区方案...

weixin_30969227的博客 570

渗透测试之哥斯拉实战

可以直接在这里使用meterpreter命令进行对服务端的控制。选择目标 - 添加,配置连接信息,之后测试连接成功!php的shell功能如图。先要进行数据库的配置信息。可以直接在这里打包全站。

大河之犬的博客 2488

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

实战:Flink 1.12 维表 Join Hive 最新分区功能体验

我们生产常有将实时数据流与 Hive 维表 join 来丰富数据的需求,其中 Hive 表是分区表,业务上需要关联上 Hive 最新分区的数据。上周 Flink 1.12 发布了,刚好支撑了这种业务场景,我也将 1.12 版本部署后做了一个线上需求并上线。对比之前生产环境中实现方案,最新分区直接作为时态表提升了很多开发效率,在这里做一些小的分享。 Flink 1.12 前关联 Hive 最新分区方案 Flink 1.12 关联 Hive 最新分区表 关联Hive最新分区 Demo Flink SQL

yscoder的博客 2135

十五、SAP-物料需求计划(MRP)

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1089

db2 update set里关联表_Flink SQL 维表关联 Hive 最新分区数据

我们生产常有将实时数据流与 Hive 维表 join 来丰富数据的需求,其中 Hive 表是分区表,业务上需要关联上 Hive 最新分区的数据。上周 Flink 1.12 发布了,刚好支撑了这种业务场景,我也将 1.12 版本部署后做了一个线上需求并上线。对比之前生产环境中实现方案,最新分区直接作为时态表提升了很多开发效率,在这里做一些小的分享。Flink 1.12 前关联Hive最...

weixin_39622747的博客 452

巧妙解决网页弹窗重复出现问题

本文探讨了网页弹窗关闭后刷新重现的问题及解决方案。通过分析原生JavaScript实现的弹窗代码存在的缺陷,提出了使用jQuery改进的方法。关键点包括:利用event.preventDefault()阻止默认行为避免刷新,采用jQuery的hide("slow")方法实现优雅的关闭动画,确保关闭状态持久化。改进后的方案既解决了弹窗重复出现的问题,又提升了用户体验,为网页弹窗交互提供了更优的实现方式。文中提供了完整的HTML、CSS和JavaScript代码示例,便于开发者直接应用。

2501_90323865的博客 179

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hive 小文件的合并 hive.merge.mapredfiles

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34150503的博客 651

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

hive--奇奇怪怪的code2报错

背景 修改分区表①脚本,需要新增列 该表每天insert overwrite 一个月,含备用字段 启用备用字段,即将原本就有的备用字段改名称、类型和备注 ALTER TABLE tb_name CHANGE old_fild new_filed DECIMAL(20, 6) comment '启用备用字段'; 跑完之后(无报错☹),跑下游脚本一直报错(整个下游也跟着改了) Error: Error while processing statement: FAILED: Execution Er

qq_46893497的博客 6974

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hive 3.x 分区表实战:基于日期与地域的 2 级分区设计,查询提速 10 倍

本文详细介绍了Hive 3.x中基于日期与地域的两级分区表设计,通过实战案例展示了如何在10亿级数据量下实现查询性能10倍提升。文章包含分区表设计原则、数据加载方法、性能对比测试及高级优化技巧,特别适合大数据处理场景下的性能优化需求。

weixin_33908217的博客 403

hive udf 分组取top1_0671-6.2.0-如何将CDH5.12的Hive元数据迁移到CDH6.2

作者:余枫​1.文档编写目的这里我们假定一个场景,你需要迁移CDH5.12到CDH6.2,CDH5.12和CDH6.2分别是两个不同的集群,我们的工作主要是HDFS数据和各种元数据从CDH5.12迁移到CDH6.2,本文不讨论HDFS数据的迁移也不讨论其他元数据的迁移比如CM或Sentry,而只关注Hive元数据的迁移。这里的问题主要是CDH5.12的Hive为1.1,而CDH6.2中Hive已经...

weixin_35285276的博客 119

hive中的数据类型

hive中的数据类型: 下表列举了Hive所支持的基本数据类型: 数据类型: 基本数类型: tinyint/smallint/int/bigint: 整数类型 float/double: 浮点数类型 boolean:布尔类型 string:字符串类型 复杂数据类型: Array:数组类型,由一系列相同数据类型的元素组成Map:集合类型,包含key->value键值对,可以通过key来访问元素Struct:结构类型,可以包含不同数据类型的元。这些元素可以通过"点语法"的方式来得到所需要的元素 时间类型:

qq_42870851的博客 5230
上一篇: 11 | Hive自定义函数
下一篇: 13 | Hive文件格式和压缩
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值