分区简介

为什么分区

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-31load 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,27load 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分区字段采用表外字段。

全方位揭秘!大数据从0到1的完美落地之Hive分区相关推荐

  1. 全方位揭秘!大数据从0到1的完美落地之Hive自定义函数

    自定义函数 自定义函数介绍 hive的内置函数满足不了所有的业务需求.hive提供很多的模块可以自定义功能,比如:自定义函数.serde.输入输出格式等.而自定义函数可以分为以下三类: 1)UDF:u ...

  2. 全方位揭秘!大数据从0到1的完美落地之Hive介绍

    Hive定义 Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并可以使用类似SQL的方式来对数据文件进行读写以及管理.这套Hive SQL 简称HQL.Hive的 ...

  3. 全方位揭秘!大数据从0到1的完美落地之Hive分桶

    分桶的概述 为什么要分桶 数据分区可能导致有些分区数据过多,有些分区数据极少.分桶是将数据集分解为若干部分(数据文件)的另一种技术. 分区和分桶其实都是对数据更细粒度的管理.当单个分区或者表中的数据越 ...

  4. 全方位揭秘!大数据从0到1的完美落地之Hive企业级调优

    Hive企业级调优 调优原则已经在MR优化阶段已经有核心描述,优化Hive可以按照MR的优化思路来执行 优化的主要考虑方面: 环境方面:服务器的配置.容器的配置.环境搭建 具体软件配置参数: 代码级别 ...

  5. 全方位揭秘!大数据从0到1的完美落地之Hive窗口函数

    窗口函数 窗口函数over简介 先来看一下这个需求:求每个部门的员工信息以及部门的平均工资.在mysql中如何实现呢 求部门平均工资 select deptno ,avg(sal) from emp ...

  6. 全方位揭秘!大数据从0到1的完美落地之Hive存储格式

    hive的存储格式 hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储. 第一类: 纯文本文件存储 textfile: 纯文本文件存储格式,不压缩,也是hive的默认存储格式,磁盘开销 ...

  7. 全方位揭秘!大数据从0到1的完美落地之Hive查询操作

    Hive基本查询语法 基本使用规则 基本查询语句组成 select .. from ..join [tableName] on ..where ..group by ..having ..order ...

  8. 全方位揭秘!大数据从0到1的完美落地之Hive压缩

    Hive的压缩 HQL语句最终会被编译成Hadoop的Mapreduce job,因此hive的压缩设置,实际上就是对底层MR在处理数据时的压缩设置. hive在map阶段的压缩 map阶段的设置, ...

  9. 全方位揭秘!大数据从0到1的完美落地之Hive视图

    hive的视图 简介 hive的视图简单理解为逻辑上的表 hive只支持逻辑视图,不支持物化视图 视图存在的意义 对数据进行局部暴露(涉及隐私的数据不暴露) 简化复杂查询 创建视图: create v ...

最新文章

  1. pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
  2. 01. 把存储过程结果集SELECT INTO到临时表
  3. 云点播网页版_微软宣布:免费开放微软云办公、云桌面、云远程方案
  4. python3创建一个游戏窗口
  5. HDU 3264 Open-air shopping malls
  6. .net core依赖注入的封装
  7. 手把手实现一条延时消息
  8. Laravel 5.4: 特殊字段太长报错 420000 字段太长
  9. Orcad Pspice仿真
  10. crontab每隔1小时运行一次
  11. html5qq授权登陆,php 第三方登陆接入qq互联
  12. 大数元科技牵手中央财经大学 助力财税金融体制改革
  13. 联通校园网避免检测随身wifi方法
  14. 【优化求解】基于NSGAII算法求解含约束多目标优化问题matlab代码
  15. 均值定理最大值最小值公式_数学均值定理怎么求不等式的最大值最小值,求教会(ฅω*ฅ)...
  16. 【聚类算法】MiniBatchKMeans算法
  17. win10的怎么调计算机亮度,win10电脑亮度怎么调
  18. FP7195大功率零压差全程无频闪调光DC-DC恒流芯片
  19. java学习 day01_basic
  20. java语言【#106. 求绝对值】(已通过)

热门文章

  1. html怎样调整文字边距,css字间距怎么调?
  2. 网格人为干扰度计算方法的matlab代码实现
  3. PostgreSQL SQL中的ALL,ANY,SOME的用法,sql查询速度优化,sql运行优化
  4. 计算机学习计划范文,教师个人计算机学习计划书_老师计算机学习计划范文
  5. 华为申请“仓颉语言”商标,开发编程语言实锤?
  6. 谷歌全球大裁员,涉及1.2万人
  7. 第一章 初识嵌入式系统
  8. IP地址的格式与分类
  9. SIGSEGV 信号的捕获与 sigaltstack 系统调用
  10. 易中天品汉代风云人物04:窦婴与外戚