文章目录

  • 分区目的
  • 分区的创建
    • 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(静态分区,动态分区)详解相关推荐

  1. hive静态与动态分区理解

    需要建立一个备份带分区的数据表,拷贝时若采用静态分区方式需要写 N 行语句,因此可以使用动态分区,节省大量时间. Hive 的分区方式:由于 Hive 实际是存储在 HDFS 上的抽象,Hive 的一 ...

  2. Hive Distribute by 应用之动态分区小文件过多问题优化

    目录 0 问题现象及原因分析 1 问题解决 解决办法 2 由以上问题引出的问题 3 思考 4 小结 0 问题现象及原因分析 现象: [Error 20004]: Fatal error occurre ...

  3. C++静态库与动态库详解与使用

    福利 | 百度 AI 开发者大会免费门票领取    CSDN日报20170628--<实习,背后的选择?>    [直播]探究Linux的总线.设备.驱动模型! C++静态库与动态库详解与 ...

  4. JAVA动态代理详解

    JAVA动态代理详解 问题 1:什么是静态代理,动态代理? 2:动态代理的好处? 什么是静态代理 以生活中例子来看,我作为某某品牌面膜的北京区代理,我替厂家卖面膜,我属于代理,厂家属于委托方. 联系到 ...

  5. python动态类型的坑_python进阶教程之动态类型详解

    动态类型(dynamic typing)是Python另一个重要的核心概念.我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值.这些都与动态类型的概念 ...

  6. AutoCAD .Net二次开发之JIG动态绘制详解

    AutoCAD .Net二次开发之JIG动态绘制详解 AutoCAD平台动态绘制分两种,单实体绘制EntityJig和多实体绘制DrawJig,需要自己自定义类去继承.(本人的理解全放在了代码注释中, ...

  7. Spark分区器HashPartitioner和RangePartitioner代码详解

    转载: https://www.iteblog.com/archives/1522.html 在Spark中分区器直接决定了RDD中分区的个数:也决定了RDD中每条数据经过Shuffle过程属于哪个分 ...

  8. kafka如何扩容分区Partition、并重新分区

    1.扩容 在新的物理机上安装kafka程序,修改config/server.properties文件里的broker.id必须在集群中唯一,修改其他必要的配置项,其中zookeeper.connect ...

  9. 聊聊分区Partition——我们为什么要分区(上)

    一直想系统的聊聊分区.网络上Oracle技术中,讨论的最多的话题之一就是Partition.各种分区类型.分区组合和随之而来的各种优缺点,一直被大家讨论.但是,实际中,我们往往看到很多以偏概全.舍本逐 ...

最新文章

  1. Paper9:Fast RCNN
  2. 把XML文件转换为字符串
  3. python tqdm进度条打印
  4. iview weapp icon组件自定义图标 小程序
  5. java addlistener_Java怎样监听文本//比如下面 y.addInputMethodListener((InputMethodListener) this);...
  6. 比起掉头发,我更怕掉队
  7. Safari浏览器不支持let声明的解决方式
  8. 谷歌:不守规矩的“顽童”
  9. 将ANSYS里的数据导入MATLAB的步骤
  10. android网络动态获取权限,基于JetPack实现的权限动态获取
  11. Twemproxy测试Redis分片主从架构
  12. http状态码大全整理
  13. python实战篇(七)---一寸照换背景
  14. STM32(7):中断方式让按键点亮LED
  15. 尺缩钟慢之动钟变慢——思想实验推导狭义相对论(七)
  16. 完全没有建站经验的人,怎么自己做网站
  17. 信贷业务:常用风险指标
  18. 小程序源码:朋友圈集赞万能截图生成器微信小程序源码下载
  19. 创新驱动看广东,上云本领看云宏!全国30多家网媒齐聚云宏参访!
  20. 用计算机制作动画,什么是计算机动画制作

热门文章

  1. C# Ping 简单使用
  2. 哪个游戏盒子里有JAVA_1254: 盒子游戏(Java)
  3. C#的DllImport使用方法详解
  4. 软件测试实例教程 pdf,软件测试报告实例.pdf
  5. 2022-2027(新版)中国数字隔离器行业销售态势与需求前景预测报告
  6. 想从事游戏建模行业的大四学生要如何安排时间比较好?
  7. Surface SurfaceView SurfaceHolder
  8. ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?
  9. 计算机网络笔记–7 网络层(下)
  10. java byte追加_byte数组追加 java