前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hive系列:二级分区、动态分区和混合分区

Hive系列:二级分区、动态分区和混合分区

作者头像
kk大数据
发布2019-08-14 15:38:48
8.4K0
发布2019-08-14 15:38:48
举报
文章被收录于专栏:kk大数据kk大数据

点击上方蓝字关注我,让我成为你的专属小太阳

Hive 系列概览

(1)hive系列之简介,安装,beeline和hiveserver2

(2)hive系列之基本操作

(3)hive系列之udf,udtf,udaf

(4)hive系列之二级分区、动态分区和混合分区

(5)hive系列之分桶表

(6)hive系列之常用函数

(7)hive系列之系统讲解开窗函数

(8)hive系列之存储格式及常用压缩格式

(9)hive系列之数据仓库建模理论

(10)hive系列之数据仓库建模-维度表和事实表

(11)hive系列之数据仓库建模-退化维度和缓慢变化维

(12)hive系列之常用企业性能优化1

(13)hive系列之常用企业性能优化2

(14)hive系列之常用企业性能优化3

今天是第四讲,Hive 的 二级分区、动态分区和混合分区

1

二级分区

所谓二级分区,就是一个表有两个分区,概念很简单。

当然 Hive 支持一个表有多个分区

这里有一份测试数据,是每个月的销量数据

今天的例子以这份数据来演示

下面建一个带两个分区的明细表,并往里面插入数据

create table tempon.t_access_partition(

uname string,

uaccount int

)

partitioned by (uyear string,umonth string);

往表插入明细数据,把 umonth 的年和月解析出来,放到分区里

INSERT OVERWRITE table tempon.t_access_partition

PARTITION (uyear = '2015' ,umonth = '01')

select uname,ucount from tempon.t_access2 where year(umonth) = '2015' and month(umonth) = '01';

INSERT OVERWRITE table tempon.t_access_partition

PARTITION (uyear = '2015' ,umonth = '02')

select uname,ucount from tempon.t_access2 where year(umonth) = '2015' and month(umonth) = '02';

INSERT OVERWRITE table tempon.t_access_partition

PARTITION (uyear = '2015' ,umonth = '03')

select uname,ucount from tempon.t_access2 where year(umonth) = '2015' and month(umonth) = '03';

select * from tempon.t_access_partition;

这里我们使用手工的方式往表的每个分区插入数据

HDFS 上每个分区都是一个目录,插入成功了

2

动态分区

上面的例子是手工写 sql 的方式往里面插入数据的,数据一多的话,就很麻烦了,Hive 当然考虑到这件事了,Hive 支持动态分区

可以根据我们指定的某个字段的值,将数据动态写入对应的分区。

现在需求是,算出每个月的销售额,并写入对应的分区

为此,我们建一张每月的销量统计表

create table tempon.t_access_sum_d (

ucount int)

partitioned by (uyear string,umonth string);

现在统计tempon.t_access2 每个月的销售额,并且插入到结果表中。

使用 Hive 的动态分区功能,需要开启两个参数:

set hive.exec.dynamic.partition.mode=nonstrict;

set hive.exec.dynamici.partition=true;

insert overwrite table tempon.t_access_sum_d

partition(uyear,umonth)

select sum(ucount),year(umonth),month(umonth) from tempon.t_access2 group by year(umonth),month(umonth)

使用这个sql就能算好销量,自动加入分区了

结果:

3

混合分区

假设这样一种情况,我们使用了动态分区,一张表的某个字段的值,决定了另一张表的分区,

如果由于存在脏数据,或人为指定字段错误,就会在另一张表产生茫茫多的分区。

hive的分区数据也是元数据的一部分,由hdfs的namenode管理,hive启动后,会缓存在内存中。

一级分区过多会影响集群性能。

为了避免这种情况,就该使用混合分区。

混合分区的概念并不复杂,就是混合了动态分区和静态分区。且静态分区应该放到动态分区的前面。

插入数据时,第一级分区写死,第二级分区使用动态分区。这样就有效控制了由于分区过多,导致文件名过多,影响hdfs性能的问题。

建表语句示例和动态分区一样,只是在数据插入时会体现出混合分区。

如下,我们手工限制第一个分区是2015年的数据

insert overwrite table tempon.t_access_sum_d

partition(uyear='2015',umonth)

select sum(ucount),month(umonth) from tempon.t_access2 group by year(umonth),month(umonth)

having year(umonth) = '2015'

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KK架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档