Hive分区——Partition(静态分区,动态分区)详解
文章目录
- 分区目的
- 分区的创建
- 1.创建建表时候不管动态还是静态分区
- 2.执行load 装载数据
- 3.查看表结构,查询分区表的数据
- 4.静态分区:
- 5.动态分区:
- 多分区
- 表分区的增删改查
分区目的
-分区主要用于提高性能
-分区列的值将表划分为一个个的文件夹
-查询时语法使用"分区"列和常规列类似
-查询时Hive会只从指定分区查询数据,提高查询效率
-分为静态分区和动态分区
分区的创建
Hive创建分区时,是通过partitioned by关键字进行创建,要注意的是这个关键字定义的列是表中正式的列,不能与表中其他列名重复,他们是目录(分区)名,目录下放的才是数据。分区字段不能与表中其他字段重复,否则会报错
1.创建建表时候不管动态还是静态分区
create table userinfos(userid string,age string,birthday string)
partitioned by (sex string)
row format delimited fields terminated by ','
stored as textfile;
2.执行load 装载数据
(其实load操作相当于把文件移动到HDFS的Hive目录下)
这种方式不合理直接忽略了性别,在查的时候强行改变该列的值但是原数据没有改变
load data local inpath '/opt/datas/user.csv' overwrite into table userinfos partition (sex='male');
3.查看表结构,查询分区表的数据
desc userinfos;
select * from userinfos;
4.静态分区:
指定分区就忽略该字段强行为分区值
场景:增量表
create table ods_users(
userid string,
username string,
birthday string,
sex string
)
row format delimited fields terminated by ','
location '/pw';
插入数据
insert into userinfos partition(sex='male') select userid,username,birthday from ods_users where sex='male';
insert into userinfos partition(sex='female') select userid,username,birthday from ods_users where sex='female';
5.动态分区:
如果用上述的静态分区,插入的时候必须首先要知道有什么分区类型,而且每个分区写一个load data,太烦人。使用动态分区可解决以上问题,其可以根据查询得到的数据动态分配到分区里。其实动态分区与静态分区区别就是不指定分区目录,由系统自己选择。
场景:数据量较小,全量导入
步骤
create table myusers(
userid string,
username string,
birthday string
)
partitioned by (sex string)
row format delimited fields terminated by ','stored as textfile;
1.开启动态(因为默认就是静态)
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
2.插入数据(不指定分区值,该字段相同值就会分为一个分区)
insert into myusers partition(sex) select * from ods_users;
3.加快查询速度,分区表和其他表没有区别
select count(*) from myusers where sex='male';
多分区
1.创建多分区表
CREATE TABLE IF NOT EXISTS employee_partitioned (name string,work_place ARRAY<string>,sex_age STRUCT<sex:string,age:int>,skills_score MAP<string,int>,depart_title MAP<STRING,ARRAY<STRING>>
)
partitioned by (year int,mouth int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE
;
2.添加和删除多分区
alter table employee_partitioned add
partition (year=2019,mouth=7)
partition (year=2020,mouth=7)
partition (year=2020,mouth=8)
;alter table employee_partitioned drop
partition (year=2019,mouth=7)
;
表分区的增删改查
1.添加分区
alter table userinfos add partition (sex='female');
2.删除分区
alter table userinfos drop partition (sex='female');
3.查询分区
show partitions userinfos;
4.修复分区
修复分区就是重新同步hdfs上的分区信息。
msck repair table userinfos;
Hive分区——Partition(静态分区,动态分区)详解相关推荐
- hive静态与动态分区理解
需要建立一个备份带分区的数据表,拷贝时若采用静态分区方式需要写 N 行语句,因此可以使用动态分区,节省大量时间. Hive 的分区方式:由于 Hive 实际是存储在 HDFS 上的抽象,Hive 的一 ...
- Hive Distribute by 应用之动态分区小文件过多问题优化
目录 0 问题现象及原因分析 1 问题解决 解决办法 2 由以上问题引出的问题 3 思考 4 小结 0 问题现象及原因分析 现象: [Error 20004]: Fatal error occurre ...
- C++静态库与动态库详解与使用
福利 | 百度 AI 开发者大会免费门票领取 CSDN日报20170628--<实习,背后的选择?> [直播]探究Linux的总线.设备.驱动模型! C++静态库与动态库详解与 ...
- JAVA动态代理详解
JAVA动态代理详解 问题 1:什么是静态代理,动态代理? 2:动态代理的好处? 什么是静态代理 以生活中例子来看,我作为某某品牌面膜的北京区代理,我替厂家卖面膜,我属于代理,厂家属于委托方. 联系到 ...
- python动态类型的坑_python进阶教程之动态类型详解
动态类型(dynamic typing)是Python另一个重要的核心概念.我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值.这些都与动态类型的概念 ...
- AutoCAD .Net二次开发之JIG动态绘制详解
AutoCAD .Net二次开发之JIG动态绘制详解 AutoCAD平台动态绘制分两种,单实体绘制EntityJig和多实体绘制DrawJig,需要自己自定义类去继承.(本人的理解全放在了代码注释中, ...
- Spark分区器HashPartitioner和RangePartitioner代码详解
转载: https://www.iteblog.com/archives/1522.html 在Spark中分区器直接决定了RDD中分区的个数:也决定了RDD中每条数据经过Shuffle过程属于哪个分 ...
- kafka如何扩容分区Partition、并重新分区
1.扩容 在新的物理机上安装kafka程序,修改config/server.properties文件里的broker.id必须在集群中唯一,修改其他必要的配置项,其中zookeeper.connect ...
- 聊聊分区Partition——我们为什么要分区(上)
一直想系统的聊聊分区.网络上Oracle技术中,讨论的最多的话题之一就是Partition.各种分区类型.分区组合和随之而来的各种优缺点,一直被大家讨论.但是,实际中,我们往往看到很多以偏概全.舍本逐 ...
最新文章
- Paper9:Fast RCNN
- 把XML文件转换为字符串
- python tqdm进度条打印
- iview weapp icon组件自定义图标 小程序
- java addlistener_Java怎样监听文本//比如下面 y.addInputMethodListener((InputMethodListener) this);...
- 比起掉头发,我更怕掉队
- Safari浏览器不支持let声明的解决方式
- 谷歌:不守规矩的“顽童”
- 将ANSYS里的数据导入MATLAB的步骤
- android网络动态获取权限,基于JetPack实现的权限动态获取
- Twemproxy测试Redis分片主从架构
- http状态码大全整理
- python实战篇(七)---一寸照换背景
- STM32(7):中断方式让按键点亮LED
- 尺缩钟慢之动钟变慢——思想实验推导狭义相对论(七)
- 完全没有建站经验的人,怎么自己做网站
- 信贷业务:常用风险指标
- 小程序源码:朋友圈集赞万能截图生成器微信小程序源码下载
- 创新驱动看广东,上云本领看云宏!全国30多家网媒齐聚云宏参访!
- 用计算机制作动画,什么是计算机动画制作
热门文章
- C# Ping 简单使用
- 哪个游戏盒子里有JAVA_1254: 盒子游戏(Java)
- C#的DllImport使用方法详解
- 软件测试实例教程 pdf,软件测试报告实例.pdf
- 2022-2027(新版)中国数字隔离器行业销售态势与需求前景预测报告
- 想从事游戏建模行业的大四学生要如何安排时间比较好?
- Surface SurfaceView SurfaceHolder
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?
- 计算机网络笔记–7 网络层(下)
- java byte追加_byte数组追加 java